1

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

例如,如果我有一个在计算中使用的 Int,通过depends_on 链接,每次我向 Int 添加一个数字时都会激活链接。

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

谢谢,

亚历克斯

4

1 回答 1

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 时,此代码才会打印 a 的值。如果您删除了 auto_set 和 enter_set,它会在每次击键时打印它。更多详情:http ://docs.enthought.com/traitsui/traitsui_user_manual/factories_basic.html#texteditor

于 2014-02-19T20:49:52.263 回答