我正在尝试学习如何使用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。另外,我不确定是否需要使用称为“适配器”或“处理程序”的东西。
任何有正确方向的提示或指示都将非常感谢!
答案 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。
如果您的代码明显不同,您可以将其添加到问题中吗?