我无法使urwid教程示例正常工作

2 投票
2 回答
3000 浏览
提问于 2025-04-17 14:44

我刚接触Python和urwid,正在尝试这里的教程示例 http://excess.org/urwid/docs/tutorial/

不过,虽然前面的示例都能正常运行,但后面的很多示例似乎都不太好使。例如,我尝试运行这个特定的示例:

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.SimpleFocusListWalker(body))

def item_chosen(button, choice):
    response = urwid.Text([u'You chose ', choice, u'\n'])
    done = urwid.Button(u'Ok')
    urwid.connect_signal(done, 'click', exit_program)
    main.original_widget = urwid.Filler(urwid.Pile([response,
        urwid.AttrMap(done, None, focus_map='reversed')]))

def exit_program(button):
    raise urwid.ExitMainLoop()

main = urwid.Padding(menu(u'Pythons', choices), left=2, right=2)
top = urwid.Overlay(main, urwid.SolidFill(u'\N{MEDIUM SHADE}'),
    align='center', width=('relative', 60),
    valign='middle', height=('relative', 60),
    min_width=20, min_height=9)
urwid.MainLoop(top, palette=[('reversed', 'standout', '')]).run()

结果出现了以下错误:

Traceback (most recent call last):
  File "example.py", line 23, in <module>
    main = urwid.Padding(menu(u'Pythons', choices), left=2, right=2)
  File "example.py", line 11, in menu
    return urwid.ListBox(urwid.SimpleFocusListWalker(body))
AttributeError: 'module' object has no attribute 'SimpleFocusListWalker'

我是不是哪里做错了?如果有帮助的话,我是在运行64位的Ubuntu 12.10。

2 个回答

-1

我已经通过 pip 安装了它。在终端里,你需要输入:

sudo pip install urwid
5

我自己搞明白了这个问题,所以我来回答一下,免得有人遇到同样的问题。

这个问题的根本原因是,教程里的例子使用了一些在早期版本的urwid中没有的功能,而这些早期版本在Ubuntu的官方软件库里可以找到。通过从源代码安装可以解决这个问题。

如果你在从源代码安装的时候遇到问题,确保你已经安装了python-dev这个软件包。

撰写回答