如何更新TraitsUI中的ListStrEditor,或者在Python GUI中显示列表的其他方式?

时间:2013-02-09 00:52:05

标签: python traits enthought traitsui

我正在尝试学习如何使用Traits为我的Python脚本构建简单的UI。我想创建一个带有列表的程序,用户可以使用一个按钮添加单词,或者用另一个按钮完全清除列表。

到目前为止,我已经使用了特征:

myList = List(Str)

myList = ['Item1','Item2'] #Initial items in list

要在traits UI中显示此列表,我使用了traits UI包中的ListStrEditor:

Item('myList', show_label = False, label = 'Data Files', editor = ListStrEditor(auto_add = False)

我已编码2个按钮: 1)一个用于将项目添加到列表中(myList.append('item3')) 2)清除列表的清除按钮(myList = [])。基本用户界面很好,按钮工作,我的列表变量按预期更改。

然而,问题是,我的GUI列表没有更新。但是,如果单击它,则会显示新值。此外,我想潜在地添加许多项目,并想知道是否有办法向侧面添加滚动条?

我查阅了ListStrEditor手册和用法,虽然我的术语有点陷入困境。显然存在refresh()函数,但我不确定如何将它应用于ListStrEditor。另外,我不确定是否需要使用称为“适配器”或“处理程序”的东西。

任何有正确方向的提示或指示都将非常感谢!

1 个答案:

答案 0 :(得分:3)

如果没有看到更完整的代码,很难知道代码无法正常工作的原因。也许你错过了使用self?例如。 self.myList.append('Item3')而非myList.append('Item3')

以下适用于我。按下按钮后,列表的显示会立即更新。

import random

from traits.api import HasTraits, List, Str, Button
from traitsui.api import ListStrEditor, View, UItem


class Demo(HasTraits):

    my_list = List(Str)

    add = Button("ADD")
    clear = Button("CLEAR")

    traits_view = \
        View(
            UItem('my_list', editor=ListStrEditor(auto_add=False)),
            UItem('add'),
            UItem('clear'),
        )

    def _my_list_default(self):
        return ['Item1', 'Item2']

    def _add_fired(self):
        new_item = "Item%d" % random.randint(3, 999)
        self.my_list.append(new_item)

    def _clear_fired(self):
        self.my_list = []


if __name__ == "__main__":
    demo = Demo()
    demo.configure_traits()

它适用于wx和qt4 + pyside后端。我使用的是Enthought python发行版,EPD 7.3,它有4.2.0版的Traits和TraitsUI。

如果您的代码明显不同,您可以将其添加到问题中吗?