0

我最近发现了 urwid 并开始使用它。我已经看到了一个类似教程示例的菜单(它有效!)并且我尝试稍微修改代码,以便我可以在初学者菜单中来回切换 - 无需做任何其他事情。

但是我被卡住了——我不知道为什么会这样。

运行此代码:

    import urwid

    choices = u'Tank_1 Tank_2 Tank_3 Solarkreis Exit'.split()

    def menu(title, choices):
        body = [urwid.Text(title), urwid.Divider()]
        for c in choices:
            button = urwid.Button(c)
            if c == "Exit":
                urwid.connect_signal(button, 'click', exit_program)
            else:
                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'Uebersicht ', choice, u'\n'])
        done = urwid.Button(u'Ok')
        urwid.connect_signal(done, 'click', menu(u'Menu', choices))
        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'Menu', 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()

运行它我得到

TypeError: 'ListBox' object is not callable

而且我非常了解如何以及为什么..非常感谢您的帮助!

编辑:忘记添加,当我尝试从子菜单返回到原始菜单时弹出错误。

4

1 回答 1

0

第 22 行,第三个参数是 ListBox 对象,不是可调用函数。urwid.connect_signal(完成,'点击',菜单(u'菜单',选择))

于 2014-06-04T10:04:52.493 回答