traitsui防止txt-box实时更新

时间:2014-02-19 15:41:26

标签: python enthought traitsui

经常使用traitsui时,我的depends_on关系有点昂贵,我不会用文本框的每个字符条目更新特征。

例如,如果我有一个用于计算的Int,通过depends_on链接,每次向Int添加一个数字时都会启动链接。

目前我通过使用按钮来规避这一点,但我很好奇是否有办法推迟更新所有内容,直到用户点击enter或更改UI的焦点。

谢谢,

亚历

1 个答案:

答案 0 :(得分:3)

您只需要在TextEditor中指定要创建几个关键字参数auto_setenter_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