经常在使用 traitsui 时,我的depends_on
关系有点昂贵,我不会用文本框的每个字符输入来更新特征。
例如,如果我有一个在计算中使用的 Int,通过depends_on 链接,每次我向 Int 添加一个数字时都会激活链接。
目前我通过使用按钮来规避这一点,但我很好奇是否有办法推迟更新所有内容,直到用户点击enter
或更改 UI 的焦点。
谢谢,
亚历克斯
您只需向 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 时,此代码才会打印 a 的值。如果您删除了 auto_set 和 enter_set,它会在每次击键时打印它。更多详情:http ://docs.enthought.com/traitsui/traitsui_user_manual/factories_basic.html#texteditor