gpt4 book ai didi

python - 如何更新 Urwid 中 SimpleWalkerList 的内容?

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:35 27 4
gpt4 key购买 nike

我找不到合适的方法来更新 URWID 中 SimpleWalkerList 的内容。下面是我尝试根据用户输入生成列表的代码的简化示例:

    import urwid

palette = [('header', 'white', 'black'),
('reveal focus', 'black', 'dark cyan', 'standout')]

items = [urwid.Text("foo"),
urwid.Text("bar"),
urwid.Text("baz")]

content = urwid.SimpleListWalker([
urwid.AttrMap(w, None, 'reveal focus') for w in items])

listbox = urwid.ListBox(content)

show_key = urwid.Text("Press any key", wrap='clip')
head = urwid.AttrMap(show_key, 'header')
top = urwid.Frame(listbox, head)

def show_all_input(input, raw):

show_key.set_text("Pressed: " + " ".join([
unicode(i) for i in input]))
return input


def exit_on_cr(input):
if input in ('q', 'Q'):
raise urwid.ExitMainLoop()
elif input == 'up':
focus_widget, idx = listbox.get_focus()
if idx > 0:
idx = idx-1
listbox.set_focus(idx)
elif input == 'down':
focus_widget, idx = listbox.get_focus()
idx = idx+1
listbox.set_focus(idx)
elif input == 'enter':
pass
#
#how here can I change value of the items list and display the ne value????
#
def out(s):
show_key.set_text(str(s))


loop = urwid.MainLoop(top, palette,
input_filter=show_all_input, unhandled_input=exit_on_cr)
loop.run()

预期的结果是将值从“foo”更改为“oof”(如此简单的字符串操作)。无论我使用什么方式都不允许我操纵这些值。我是否需要停止循环并从头开始重新绘制整个屏幕?

提前致谢!

最佳答案

SimpleListWalker 的文档中所述:

contents – list to copy into this object

Changes made to this object (when it is treated as a list) are detected automatically and will cause ListBox objects using this list walker to be updated.

因此,您所要做的就是修改列表中的元素:

elif input in 'rR':
_, idx = listbox.get_focus()
am = content[idx].original_widget
am.set_text(am.text[::-1])

即使列表中有不可变值,您也可以用新对象替换它们:

elif input in 'rR':
_, idx = listbox.get_focus()
w = urwid.Text(content[idx].original_widget.text[::-1])
content[idx] = urwid.AttrMap(w, None, 'reveal focus')

但是因为您没有任何不可变对象(immutable对象)妨碍,所以没有必要;第一个版本可以正常工作。

无论哪种方式,如果您按下 r,您指向的任何文本都会被反转,例如 foooof。 (当然,如果您使用任何标记,您需要做一些比这更小心的事情,但您没有。)

关于python - 如何更新 Urwid 中 SimpleWalkerList 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51757605/

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