gpt4 book ai didi

python - Urwid 水平菜单 - 返回上一个状态或重新开始循环

转载 作者:行者123 更新时间:2023-11-28 17:28:39 29 4
gpt4 key购买 nike

我正在构建一个基于 Horizontal Menu 的应用程序来自 Urwid 的示例。我有一个项目,我想显示一些信息。我在下方有一个“确定”按钮,我希望它可以将菜单弹出回到之前的状态,或者重新启动整个屏幕/循环。

在示例中,他们使用了 ExitMainLoop(),但我不想退出 - 我只想重新启动它。因此,我已将回调更改为不同的函数 - 但我所有的尝试要么什么都不做,要么使我的程序崩溃。

这里是相关的部分:

启动菜单:

if __name__ == "__main__":
top = HorizontalBoxes()
top.open_box(menu_top([]).menu)
urwid.MainLoop(urwid.Filler(top, 'middle', 40), palette).run()

相关菜单类/函数。 我的问题是 - does_nothing 函数中发生了什么?

class Choice(urwid.WidgetWrap):
def __init__(self, caption, pid):
super(Choice, self).__init__(
MenuButton(caption, partial(self.item_chosen,pid)))
self.caption = caption

def item_chosen(self, pid, button):
if self.caption == (u"System status"):
showSystemStatus()


def showSystemStatus():
response = urwid.Text( "... some text ")
done = MenuButton(u'OK', does_nothing)
response_box = urwid.Filler(urwid.Pile([response,done]))
top.open_box(urwid.AttrMap(response_box, 'options'))

def does_nothing(key):
????????????????????
return

最佳答案

我找到了解决办法!我必须向 Horizo​​ntalBoxes 类添加一个新方法。具体来说,close_box 方法:

class HorizontalBoxes(urwid.Columns):
def __init__(self):
super(HorizontalBoxes, self).__init__([], dividechars=1)

def open_box(self, box):
if self.contents:
del self.contents[self.focus_position + 1:]
self.contents.append((urwid.AttrMap(box, 'options', focus_map),
self.options('given', 40)))
self.focus_position = len(self.contents) - 1

def close_box(self):
if self.contents:
del self.contents[self.focus_position :]
self.focus_position = len(self.contents) - 1

然后,从我之前的 does_nothing 函数调用 close_box 方法是一件简单的事情:

def does_nothing(key):
top.close_box()
return

关于python - Urwid 水平菜单 - 返回上一个状态或重新开始循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36385185/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com