Mercurial > urwid-satext
comparison examples/menu.py @ 41:589e5e22f8f1
menu example: added shortcut example + some comments
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 20 Feb 2011 00:32:57 +0100 |
parents | 4da76342ae05 |
children | 585302e84c1f |
comparison
equal
deleted
inserted
replaced
40:4da76342ae05 | 41:589e5e22f8f1 |
---|---|
16 | 16 |
17 class MenuDemo(object): | 17 class MenuDemo(object): |
18 | 18 |
19 def __init__(self): | 19 def __init__(self): |
20 _frame = urwid.Frame(urwid.Filler(urwid.Text('Menu demo', align='center'))) | 20 _frame = urwid.Frame(urwid.Filler(urwid.Text('Menu demo', align='center'))) |
21 self.loop = urwid.MainLoop(_frame, const_PALETTE, unhandled_input=self.test_quit) | 21 self.loop = urwid.MainLoop(_frame, const_PALETTE, unhandled_input=self.keyHandler) |
22 _frame.set_header(self.buildMenu()) | 22 _frame.set_header(self.buildMenu()) |
23 _frame.set_focus('header') | 23 _frame.set_focus('header') |
24 | 24 |
25 def run(self): | 25 def run(self): |
26 self.loop.run() | 26 self.loop.run() |
27 | 27 |
28 def menu_cb(self, menu_data): | 28 def _messageExit(self, message): |
29 #We print the menu data in the middle of the screen | 29 #We print the menu data in the middle of the screen |
30 new_widget = urwid.Filler(urwid.Text("Menu selected: %s/%s" % menu_data, align='center')) | 30 new_widget = urwid.Filler(urwid.Text(message, align='center')) |
31 self.loop.widget = new_widget | 31 self.loop.widget = new_widget |
32 self.loop.draw_screen() | 32 self.loop.draw_screen() |
33 #5 seconds pause | 33 #5 seconds pause |
34 time.sleep(5) | 34 time.sleep(5) |
35 #see you | 35 #see you |
36 raise urwid.ExitMainLoop() | 36 raise urwid.ExitMainLoop() |
37 | 37 |
38 def menu_cb(self, menu_data): | |
39 self._messageExit("Menu selected: %s/%s" % menu_data) | |
40 | |
41 def exit_cb(self, menu_data): | |
42 self._messageExit("Exiting throught 'Exit' menu item") | |
43 | |
38 def buildMenu(self): | 44 def buildMenu(self): |
39 _menu = Menu(self.loop) | 45 self.menu = Menu(self.loop) |
40 _menu1 = "Menu 1" | 46 _menu1 = "Menu 1" |
41 _menu.addMenu(_menu1, "Item 1", self.menu_cb) | 47 self.menu.addMenu(_menu1, "Item 1", self.menu_cb) #Adding a menu is quite easy |
42 _menu.addMenu(_menu1, "Item 2", self.menu_cb) | 48 self.menu.addMenu(_menu1, "Item 2", self.menu_cb) #Here the callback is always the same, |
43 _menu.addMenu(_menu1, "Item 3", self.menu_cb) | 49 self.menu.addMenu(_menu1, "Item 3", self.menu_cb) #but you use differents one in real life :) |
50 self.menu.addMenu(_menu1, "Exit (C-x)", self.exit_cb, 'ctrl x') #You can also add a shortcut | |
44 _menu2 = "Menu 2" | 51 _menu2 = "Menu 2" |
45 _menu.addMenu(_menu2, "Item 1", self.menu_cb) | 52 self.menu.addMenu(_menu2, "Item 1", self.menu_cb) |
46 _menu.addMenu(_menu2, "Item 2", self.menu_cb) | 53 self.menu.addMenu(_menu2, "Item 2", self.menu_cb) |
47 _menu.addMenu(_menu2, "Item 3", self.menu_cb) | 54 self.menu.addMenu(_menu2, "Item 3", self.menu_cb) |
48 return _menu | 55 return self.menu |
49 | 56 |
50 def test_quit(self, input): | 57 def keyHandler(self, input): |
51 """We leave is user press 'esc'""" | 58 """We leave is user press 'esc'""" |
52 if input in ('esc','q','Q'): | 59 if input in ('esc','q','Q'): |
53 raise urwid.ExitMainLoop() | 60 raise urwid.ExitMainLoop() |
61 else: | |
62 return self.menu.checkShortcuts(input) | |
54 | 63 |
55 demo = MenuDemo() | 64 demo = MenuDemo() |
56 demo.run() | 65 demo.run() |