0

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

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

myList = List(Str)

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

为了在特性 UI 中显示这个列表,我使用了特性 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。另外,我不确定是否需要使用称为“适配器”或“处理程序”的东西。

任何正确方向的提示或指示将不胜感激!

4

1 回答 1

4

如果没有看到更完整的代码,就很难知道您的代码为什么不起作用。也许你错过了使用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,它具有 Traits 和 TraitsUI 的 4.2.0 版本。

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

于 2013-02-09T15:27:18.143 回答