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()