我最近发现了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
我完全明白了如何以及为什么......非常感谢帮助!
编辑:忘记添加,当我尝试从子菜单返回原始菜单时弹出错误。
答案 0 :(得分:0)
第22行,第三个参数是ListBox对象而不是可调用函数。 urwid.connect_signal(已完成,'点击',菜单(u'菜单',选项))