经常使用traitsui时,我的depends_on
关系有点昂贵,我不会用文本框的每个字符条目更新特征。
例如,如果我有一个用于计算的Int,通过depends_on链接,每次向Int添加一个数字时都会启动链接。
目前我通过使用按钮来规避这一点,但我很好奇是否有办法推迟更新所有内容,直到用户点击enter
或更改UI的焦点。
谢谢,
亚历
答案 0 :(得分:3)
您只需要在TextEditor中指定要创建几个关键字参数auto_set
和enter_set
,以便小部件知道何时需要评估您的值。这是一个实现懒惰小部件的示例:
from traits.api import HasTraits, Int
from traitsui.api import TextEditor, View, Item
class LazyEval(HasTraits):
a = Int
# Additional 'evaluate' is needed to make an int from a string
view = View(Item("a", editor=TextEditor(auto_set=False, enter_set=True,
evaluate=int)))
def _a_changed(self):
print "New value of a is %s" % self.a
l = LazyEval()
l.configure_traits()
此代码仅在您立即按Enter键时打印值。如果你删除了auto_set和enter_set,它会在每次击键时打印出来。有关详细信息:http://docs.enthought.com/traitsui/traitsui_user_manual/factories_basic.html#texteditor