diff options
| author | Ian Ward <ian@excess.org> | 2012-09-18 22:12:08 -0400 |
|---|---|---|
| committer | Ian Ward <ian@excess.org> | 2012-09-18 22:12:08 -0400 |
| commit | da0f30e5561c8ed0b4a9300cab23d00283cec01c (patch) | |
| tree | 49f0d39246f3af4f30d473bb463e1dc127b74aeb /docs/tutorial | |
| parent | c93f671c8d0b3dc1764ead8746da96fa905ab859 (diff) | |
| download | urwid-da0f30e5561c8ed0b4a9300cab23d00283cec01c.tar.gz | |
tutorial: work on making menu examples fancier-looking
--HG--
branch : feature-sphinx
Diffstat (limited to 'docs/tutorial')
24 files changed, 70 insertions, 21 deletions
diff --git a/docs/tutorial/index.rst b/docs/tutorial/index.rst index 1a4c911..dd3de0b 100644 --- a/docs/tutorial/index.rst +++ b/docs/tutorial/index.rst @@ -237,6 +237,7 @@ It then asks again, and again. Old values may be changed and the responses will be updated when you press *ENTER*. *ENTER* on a blank line exits. .. literalinclude:: lbcont.py + :linenos: :class:`ListBox` widgets let you scroll through a number of flow widgets vertically. It handles *UP*, *DOWN*, *PAGE UP* and *PAGE DOWN* keystrokes @@ -279,12 +280,16 @@ Menu Example Simple Menu with Buttons ------------------------ -We can create a very simple menu using a list of :class:`Button` widgets. This program -lets you choose an option then repeats what you chose. +We can create a very simple menu using a list of :class:`Button` widgets. +This program lets you choose an option then repeats what you chose. .. literalinclude:: menu1.py :linenos: +.. image:: menu11.png +.. image:: menu12.png +.. image:: menu13.png + Nested Menus ------------ @@ -294,6 +299,11 @@ lets you choose an option from a nested menu then repeats what you chose. .. literalinclude:: menu2.py :linenos: +.. image:: menu21.png +.. image:: menu22.png +.. image:: menu23.png +.. image:: menu24.png + Nested Menus with Custom Widgets -------------------------------- @@ -303,13 +313,23 @@ component we are creating. The :class:`Button` subclasses are customized to remo default decorations .. literalinclude:: menu3.py + :linenos: -Adventure Game in Menus ------------------------ +.. image:: menu31.png +.. image:: menu32.png +.. image:: menu33.png +.. image:: menu34.png -.. literalinclude:: menu4.py +"Adventure Game" in Menus +------------------------- +.. literalinclude:: menu4.py + :linenos: +.. image:: menu41.png +.. image:: menu42.png +.. image:: menu43.png +.. image:: menu44.png .. _zen-listbox: diff --git a/docs/tutorial/menu1.py b/docs/tutorial/menu1.py index f3dd0a3..98096f8 100644 --- a/docs/tutorial/menu1.py +++ b/docs/tutorial/menu1.py @@ -1,24 +1,27 @@ import urwid +choices = u'Chapman Cleese Gilliam Idle Jones Palin'.split() + def menu(title, choices): body = [urwid.Text(title), urwid.Divider()] for c in choices: button = urwid.Button(c) urwid.connect_signal(button, 'click', item_chosen, c) body.append(urwid.AttrMap(button, None, focus_map='reversed')) - return urwid.ListBox(urwid.SimpleListWalker(body)) + return urwid.ListBox(urwid.SimpleFocusListWalker(body)) def item_chosen(self, choice): response = urwid.Text(u'You chose %s' % choice) - loop.widget = urwid.Filler(response) + main.original_widget = urwid.Filler(response) # exit on the next input from user loop.unhandled_input = exit_program def exit_program(key): raise urwid.ExitMainLoop() -choices = u'Chapman Cleese Gilliam Idle Jones Palin'.split() - -loop = urwid.MainLoop(menu(u'Pythons', choices), +main = urwid.Padding(menu(u'Pythons', choices), left=2, right=2) +top = urwid.Overlay(main, urwid.SolidFill(u'\u2592'), + 'center', 20, 'middle', 9) +loop = urwid.MainLoop(top, palette=[('reversed', 'standout', '')]) loop.run() diff --git a/docs/tutorial/menu1.py.xdotool b/docs/tutorial/menu1.py.xdotool new file mode 100644 index 0000000..3ef7d5c --- /dev/null +++ b/docs/tutorial/menu1.py.xdotool @@ -0,0 +1,3 @@ +windowsize --usehints $RXVTWINDOWID 24 11 +key --window $RXVTWINDOWID Down Down Down +key --window $RXVTWINDOWID Return diff --git a/docs/tutorial/menu11.png b/docs/tutorial/menu11.png Binary files differnew file mode 100644 index 0000000..73b8235 --- /dev/null +++ b/docs/tutorial/menu11.png diff --git a/docs/tutorial/menu12.png b/docs/tutorial/menu12.png Binary files differnew file mode 100644 index 0000000..6fe32d3 --- /dev/null +++ b/docs/tutorial/menu12.png diff --git a/docs/tutorial/menu13.png b/docs/tutorial/menu13.png Binary files differnew file mode 100644 index 0000000..67af851 --- /dev/null +++ b/docs/tutorial/menu13.png diff --git a/docs/tutorial/menu2.py b/docs/tutorial/menu2.py index aaf805d..c158d6d 100644 --- a/docs/tutorial/menu2.py +++ b/docs/tutorial/menu2.py @@ -1,25 +1,24 @@ import urwid -def menu_button(caption, callback, data=None): +def menu_button(caption, callback): button = urwid.Button(caption) - urwid.connect_signal(button, 'click', callback, data) + urwid.connect_signal(button, 'click', callback) return urwid.AttrMap(button, None, focus_map='reversed') def sub_menu(caption, choices): contents = menu(caption, choices) - return menu_button(u'MENU: %s' % caption, open_menu, contents) + def open_menu(button): + return top.open_menu(contents) + return menu_button(u'MENU: %s' % caption, open_menu) def menu(title, choices): body = [urwid.Text(title), urwid.Divider()] body.extend(choices) - return urwid.ListBox(urwid.SimpleListWalker(body)) - -def open_menu(button, menu): - loop.widget = menu + return urwid.ListBox(urwid.SimpleFocusListWalker(body)) def item_chosen(button): response = urwid.Text(u'You chose %s' % button.label) - loop.widget = urwid.Filler(response) + top.open_menu(urwid.Filler(response)) # exit on the next input from user loop.unhandled_input = exit_program @@ -41,6 +40,18 @@ menu_top = menu(u'Main Menu', [ ]), ]) -loop = urwid.MainLoop(menu_top, - palette=[('reversed', 'standout', '')]) +class NestedMenus(urwid.WidgetPlaceholder): + def __init__(self, menu): + super(NestedMenus, self).__init__(urwid.SolidFill(u'/')) + self.menu_level = 0 + self.open_menu(menu) + + def open_menu(self, menu): + self.original_widget = urwid.Overlay(urwid.LineBox(menu), + self.original_widget, 'left', 24, 'top', 8, + left=self.menu_level * 2, top=self.menu_level * 2) + self.menu_level += 1 + +top = NestedMenus(menu_top) +loop = urwid.MainLoop(top, palette=[('reversed', 'standout', '')]) loop.run() diff --git a/docs/tutorial/menu2.py.xdotool b/docs/tutorial/menu2.py.xdotool new file mode 100644 index 0000000..a87fc38 --- /dev/null +++ b/docs/tutorial/menu2.py.xdotool @@ -0,0 +1,4 @@ +windowsize --usehints $RXVTWINDOWID 32 14 +key --window $RXVTWINDOWID Return +key --window $RXVTWINDOWID Return Down +key --window $RXVTWINDOWID Return diff --git a/docs/tutorial/menu21.png b/docs/tutorial/menu21.png Binary files differnew file mode 100644 index 0000000..95406dc --- /dev/null +++ b/docs/tutorial/menu21.png diff --git a/docs/tutorial/menu22.png b/docs/tutorial/menu22.png Binary files differnew file mode 100644 index 0000000..870ffed --- /dev/null +++ b/docs/tutorial/menu22.png diff --git a/docs/tutorial/menu23.png b/docs/tutorial/menu23.png Binary files differnew file mode 100644 index 0000000..ae9faa7 --- /dev/null +++ b/docs/tutorial/menu23.png diff --git a/docs/tutorial/menu24.png b/docs/tutorial/menu24.png Binary files differnew file mode 100644 index 0000000..53b9293 --- /dev/null +++ b/docs/tutorial/menu24.png diff --git a/docs/tutorial/menu25.png b/docs/tutorial/menu25.png Binary files differnew file mode 100644 index 0000000..38956c5 --- /dev/null +++ b/docs/tutorial/menu25.png diff --git a/docs/tutorial/menu3.py b/docs/tutorial/menu3.py index 2d257a6..e3bd0bb 100644 --- a/docs/tutorial/menu3.py +++ b/docs/tutorial/menu3.py @@ -4,7 +4,7 @@ class MenuButton(urwid.Button): def __init__(self, caption, callback): super(MenuButton, self).__init__("") urwid.connect_signal(self, 'click', callback) - self._w = urwid.AttrMap(urwid.SelectableIcon(caption, 1), + self._w = urwid.AttrMap(urwid.SelectableIcon(caption, 0), None, focus_map='reversed') class SubMenu(urwid.WidgetWrap): diff --git a/docs/tutorial/menu3.py.xdotool b/docs/tutorial/menu3.py.xdotool new file mode 100644 index 0000000..88fbf69 --- /dev/null +++ b/docs/tutorial/menu3.py.xdotool @@ -0,0 +1,4 @@ +windowsize --usehints $RXVTWINDOWID 23 8 +key --window $RXVTWINDOWID Down +key --window $RXVTWINDOWID Return Down +key --window $RXVTWINDOWID Return diff --git a/docs/tutorial/menu31.png b/docs/tutorial/menu31.png Binary files differnew file mode 100644 index 0000000..5304300 --- /dev/null +++ b/docs/tutorial/menu31.png diff --git a/docs/tutorial/menu32.png b/docs/tutorial/menu32.png Binary files differnew file mode 100644 index 0000000..8ddd497 --- /dev/null +++ b/docs/tutorial/menu32.png diff --git a/docs/tutorial/menu33.png b/docs/tutorial/menu33.png Binary files differnew file mode 100644 index 0000000..5979e08 --- /dev/null +++ b/docs/tutorial/menu33.png diff --git a/docs/tutorial/menu34.png b/docs/tutorial/menu34.png Binary files differnew file mode 100644 index 0000000..53109bf --- /dev/null +++ b/docs/tutorial/menu34.png diff --git a/docs/tutorial/menu4.py.xdotool b/docs/tutorial/menu4.py.xdotool new file mode 100644 index 0000000..85999f6 --- /dev/null +++ b/docs/tutorial/menu4.py.xdotool @@ -0,0 +1,4 @@ +windowsize --usehints $RXVTWINDOWID 23 8 +key --window $RXVTWINDOWID Return Down Down +key --window $RXVTWINDOWID Return Down +key --window $RXVTWINDOWID Return diff --git a/docs/tutorial/menu41.png b/docs/tutorial/menu41.png Binary files differnew file mode 100644 index 0000000..00b5a9f --- /dev/null +++ b/docs/tutorial/menu41.png diff --git a/docs/tutorial/menu42.png b/docs/tutorial/menu42.png Binary files differnew file mode 100644 index 0000000..d7c0440 --- /dev/null +++ b/docs/tutorial/menu42.png diff --git a/docs/tutorial/menu43.png b/docs/tutorial/menu43.png Binary files differnew file mode 100644 index 0000000..34f616a --- /dev/null +++ b/docs/tutorial/menu43.png diff --git a/docs/tutorial/menu44.png b/docs/tutorial/menu44.png Binary files differnew file mode 100644 index 0000000..3ff574f --- /dev/null +++ b/docs/tutorial/menu44.png |
