【问题标题】:How to update ListStrEditor in TraitsUI, or another way of displaying a list in a Python GUI?如何更新 TraitsUI 中的 ListStrEditor,或在 Python GUI 中显示列表的另一种方式?
【发布时间】:2013-02-09 00:52:05
【问题描述】:

我正在尝试学习如何使用 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。另外,我不确定是否需要使用称为“适配器”或“处理程序”的东西。

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

【问题讨论】:

  • 您能否提供一个独立的示例来演示该问题?

标签: python traits enthought traitsui


【解决方案1】:

没有看到更完整的代码,很难知道为什么你的代码不工作。也许您错过了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 版本。

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

【讨论】:

  • 谢谢,效果很好。这与我的代码非常相似(注意,抱歉,我没有及时回复以给出一个最低限度的工作示例!)尽管我将my_list = ['item1', 'item2'] 直接放在my_list = List(str) 之后,我认为这是导致问题的原因。谢谢你的帮助! PS,我注意到您使用的是 UItem 而不是 Item。两者似乎都有效,使用 UItem 有什么好处吗?
  • UItemItemshow_label = False 的子类——就是这样。看看这里的来源:github.com/enthought/traitsui/blob/master/traitsui/item.py
  • 另外,我使用了_my_list_default 方法来设置默认值,但在这种情况下这可能是矫枉过正。相反,可以在特征声明中给出默认值,使用 value 关键字: my_list = List(Str, value=['Item1', 'Item2'])`
  • 谢谢,知道这很有用!
  • 你知道是否有办法让滚动条位于底部,这样新条目会导致显示“向上滚动”,而不是将视图重置为前 N 个条目?跨度>
猜你喜欢
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多