urwid 改变显示属性

urwid changing a display attribute

我正在创建一个允许用户从一组合法值中进行选择的配置器。我为每个合法值创建一个 Choice(本质上是一个 MenuButton)。如果用户选择一个 Choice,则该选项会将值更改为其标题。

请注意,具有当前值的 Choice 具有与其他选项不同的属性。我想在做出选择后循环选择并更改属性以匹配新值。

我可以通过将 legal_choices 列表传递给所有 Choices 来循环选择(或者做一些更聪明的事情),但我不知道如何编写循环遍历小部件列表和更改的代码他们的属性。

            for vv in leg_values:
                choice = Choice(vv, self, item)
                if vv == self.get_var(item):
                    choice = urwid.AttrMap(choice,'cur_value')
                legal_choices.append(choice)
            var_item = SubMenu(top,item,legal_choices)

有谁知道如何在 urwid 中更改小部件的属性?

我在按钮方面遇到了同样的问题,但 3 年后我仍然找不到答案。这在试验后对我有用:

button = urwid.Button("some label")
urwid.connect_signal(button, 'click', self.item_chosen, task)
# Assigning original AttrMap 
button = urwid.AttrMap(button, None, focus_map='reversed')

# At a later point you can change the AttrMap used like this and the button color will change:
button.attr_map = {None: "active task"}