Взялся вникать в руководство по urwid и столкнулся с тем, что примеры из этого руководства не запускаются. На чём запускаю: ОС - linux mint debian edition, Python 3.2.3 (default, Jun 25 2012, 23:10:56) on linux2 и IPython 0.13.1. Библиотека urwid поставлена из репов, согласно aptitude версия 1.0.1-2.
Например копипастю такое:
import urwid def exit_on_q(key): if key in ('q', 'Q'): raise urwid.ExitMainLoop() palette = [ ('banner', '', '', '', '#ffa', '#60d'), ('streak', '', '', '', 'g50', '#60a'), ('inside', '', '', '', 'g38', '#808'), ('outside', '', '', '', 'g27', '#a06'), ('bg', '', '', '', 'g7', '#d06'),] placeholder = urwid.SolidFill() loop = urwid.MainLoop(placeholder, palette, unhandled_input=exit_on_q) loop.screen.set_terminal_properties(colors=256) loop.widget = urwid.AttrMap(placeholder, 'bg') loop.widget.original_widget = urwid.Filler(urwid.Pile([])) div = urwid.Divider() outside = urwid.AttrMap(div, 'outside') inside = urwid.AttrMap(div, 'inside') txt = urwid.Text(('banner', " Hello World "), align='center') streak = urwid.AttrMap(txt, 'streak') pile = loop.widget.base_widget # .base_widget skips the decorations for item in [outside, inside, streak, inside, outside]: pile.contents.append((item, pile.options())) loop.run()
Первые примеры не запускались, ругаясь на код типа u'какой-то текст', но это исправлялось стиранием u перед кавычками. Этот пример при попытке запуска пишет такое:
AttributeError Traceback (most recent call last) /usr/lib/python3/dist-packages/IPython/utils/py3compat.py in execfile(fname, glob, loc) 74 def execfile(fname, glob, loc=None): 75 loc = loc if (loc is not None) else glob ---> 76 exec(compile(open(fname, 'rb').read(), fname, 'exec'), glob, loc) 77 78 # Refactor print statements in doctests. /home/antib/Документы/Py/urwid4.py in <module>() 25 pile = loop.widget.base_widget # .base_widget skips the decorations 26 for item in [outside, inside, streak, inside, outside]: ---> 27 pile.contents.append((item, pile.options())) 28 29 loop.run()
import urwid def menu_button(caption, callback): button = urwid.Button(caption) urwid.connect_signal(button, 'click', callback) return urwid.AttrMap(button, None, focus_map='reversed') def sub_menu(caption, choices): contents = menu(caption, choices) def open_menu(button): return top.open_box(contents) return menu_button([caption, '...'], open_menu) def menu(title, choices): body = [urwid.Text(title), urwid.Divider()] body.extend(choices) return urwid.ListBox(urwid.SimpleFocusListWalker(body)) def item_chosen(button): response = urwid.Text(['You chose ', button.label, '\n']) done = menu_button('Ok', exit_program) top.open_box(urwid.Filler(urwid.Pile([response, done]))) def exit_program(button): raise urwid.ExitMainLoop() menu_top = menu('Main Menu', [ sub_menu('Applications', [ sub_menu('Accessories', [ menu_button('Text Editor', item_chosen), menu_button('Terminal', item_chosen), ]), ]), sub_menu('System', [ sub_menu('Preferences', [ menu_button('Appearance', item_chosen), ]), menu_button('Lock Screen', item_chosen), ]), ]) class CascadingBoxes(urwid.WidgetPlaceholder): max_box_levels = 4 def __init__(self, box): super(CascadingBoxes, self).__init__(urwid.SolidFill('/')) self.box_level = 0 self.open_box(box) def open_box(self, box): self.original_widget = urwid.Overlay(urwid.LineBox(box), self.original_widget, align='center', width=('relative', 80), valign='middle', height=('relative', 80), min_width=24, min_height=8, left=self.box_level * 3, right=(self.max_box_levels - self.box_level - 1) * 3, top=self.box_level * 2, bottom=(self.max_box_levels - self.box_level - 1) * 2) self.box_level += 1 def keypress(self, size, key): if key == 'esc' and self.box_level > 1: self.original_widget = self.original_widget[0] self.box_level -= 1 else: return super(CascadingBoxes, self).keypress(size, key) top = CascadingBoxes(menu_top) urwid.MainLoop(top, palette=[('reversed', 'standout', '')]).run()
antib@silentbox:~/Документы/Py$ ipython3 urwid8.py --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) /usr/lib/python3/dist-packages/IPython/utils/py3compat.py in execfile(fname, glob, loc) 74 def execfile(fname, glob, loc=None): 75 loc = loc if (loc is not None) else glob ---> 76 exec(compile(open(fname, 'rb').read(), fname, 'exec'), glob, loc) 77 78 # Refactor print statements in doctests. /home/antib/Документы/Py/urwid8.py in <module>() 29 sub_menu('Accessories', [ 30 menu_button('Text Editor', item_chosen), ---> 31 menu_button('Terminal', item_chosen), 32 ]), 33 ]), /home/antib/Документы/Py/urwid8.py in sub_menu(caption, choices) 7 8 def sub_menu(caption, choices): ----> 9 contents = menu(caption, choices) 10 def open_menu(button): 11 return top.open_box(contents) /home/antib/Документы/Py/urwid8.py in menu(title, choices) 15 body = [urwid.Text(title), urwid.Divider()] 16 body.extend(choices) ---> 17 return urwid.ListBox(urwid.SimpleFocusListWalker(body)) 18 19 def item_chosen(button): AttributeError: 'module' object has no attribute 'SimpleFocusListWalker'
попробовал поставить urwid с стайта разработчика.
antib@silentbox:~/Документы/Py/urwid-1.1.1$ sudo python3 setup.py build [sudo] password for antib: running build running build_py running build_ext building 'urwid.str_util' extension gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -fPIC -I/usr/include/python3.2mu -c source/str_util.c -o build/temp.linux-x86_64-3.2/source/str_util.o gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-3.2/source/str_util.o -o build/lib.linux-x86_64-3.2/urwid/str_util.cpython-32mu.so antib@silentbox:~/Документы/Py/urwid-1.1.1$ sudo python3 setup.py install running install Checking .pth file support in /usr/local/lib/python3.2/dist-packages/ /usr/bin/python3 -E -c pass TEST PASSED: /usr/local/lib/python3.2/dist-packages/ appears to support .pth files running bdist_egg running egg_info writing urwid.egg-info/PKG-INFO writing top-level names to urwid.egg-info/top_level.txt writing dependency_links to urwid.egg-info/dependency_links.txt reading manifest file 'urwid.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' writing manifest file 'urwid.egg-info/SOURCES.txt' installing library code to build/bdist.linux-x86_64/egg running install_lib running build_py running build_ext creating build/bdist.linux-x86_64 creating build/bdist.linux-x86_64/egg creating build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/text_layout.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/html_fragment.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/font.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/listbox.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/raw_display.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/display_common.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/container.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/old_str_util.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/command_map.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/tests.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/graphics.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/compat.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/canvas.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/escape.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/split_repr.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/treetools.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/decoration.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/vterm_test.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/monitored_list.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/web_display.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/str_util.cpython-32mu.so -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/lcd_display.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/curses_display.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/signals.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/__init__.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/version.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/util.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/widget.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/wimp.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/vterm.py -> build/bdist.linux-x86_64/egg/urwid copying build/lib.linux-x86_64-3.2/urwid/main_loop.py -> build/bdist.linux-x86_64/egg/urwid byte-compiling build/bdist.linux-x86_64/egg/urwid/text_layout.py to text_layout.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/html_fragment.py to html_fragment.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/font.py to font.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/listbox.py to listbox.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/raw_display.py to raw_display.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/display_common.py to display_common.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/container.py to container.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/old_str_util.py to old_str_util.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/command_map.py to command_map.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/tests.py to tests.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/graphics.py to graphics.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/compat.py to compat.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/canvas.py to canvas.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/escape.py to escape.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/split_repr.py to split_repr.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/treetools.py to treetools.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/decoration.py to decoration.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/vterm_test.py to vterm_test.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/monitored_list.py to monitored_list.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/web_display.py to web_display.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/lcd_display.py to lcd_display.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/curses_display.py to curses_display.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/signals.py to signals.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/__init__.py to __init__.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/version.py to version.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/util.py to util.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/widget.py to widget.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/wimp.py to wimp.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/vterm.py to vterm.cpython-32.pyc byte-compiling build/bdist.linux-x86_64/egg/urwid/main_loop.py to main_loop.cpython-32.pyc creating stub loader for urwid/str_util.cpython-32mu.so byte-compiling build/bdist.linux-x86_64/egg/urwid/str_util.py to str_util.cpython-32.pyc creating build/bdist.linux-x86_64/egg/EGG-INFO copying urwid.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO copying urwid.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO copying urwid.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO copying urwid.egg-info/not-zip-safe -> build/bdist.linux-x86_64/egg/EGG-INFO copying urwid.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO writing build/bdist.linux-x86_64/egg/EGG-INFO/native_libs.txt creating dist creating 'dist/urwid-1.1.1-py3.2-linux-x86_64.egg' and adding 'build/bdist.linux-x86_64/egg' to it removing 'build/bdist.linux-x86_64/egg' (and everything under it) Processing urwid-1.1.1-py3.2-linux-x86_64.egg creating /usr/local/lib/python3.2/dist-packages/urwid-1.1.1-py3.2-linux-x86_64.egg Extracting urwid-1.1.1-py3.2-linux-x86_64.egg to /usr/local/lib/python3.2/dist-packages Adding urwid 1.1.1 to easy-install.pth file Installed /usr/local/lib/python3.2/dist-packages/urwid-1.1.1-py3.2-linux-x86_64.egg Processing dependencies for urwid==1.1.1 Finished processing dependencies for urwid==1.1.1 antib@silentbox:~/Документы/Py/urwid-1.1.1$ python3
Пакет установился, но при запуске в питоне:
Python 3.2.3 (default, Jun 25 2012, 23:10:56) [GCC 4.7.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import urwid Traceback (most recent call last): File "<stdin>", line 1, in <module> File "urwid/__init__.py", line 24, in <module> from urwid.widget import (FLOW, BOX, FIXED, LEFT, RIGHT, CENTER, TOP, MIDDLE, File "urwid/widget.py", line 694 def __init__(self,div_char=u" ",top=0,bottom=0): ^ SyntaxError: invalid syntax >>>
Как это забороть и чем ему u перед кавычками не нравиться?