【问题标题】:TraitsUI CheckListEditor changing the case of valuesTraitsUI CheckListEditor 更改值的大小写
【发布时间】:2014-07-02 05:40:58
【问题描述】:

我使用CheckListEditor 让用户选择可用选项的子集。将样式设置为“自定义”时,它会显示一个带有标签的复选框列表。这就是我想要的。但是,一个问题是,在某些情况下显示的文本内容会改变大小写 - 我很困惑为什么会发生这种情况。

例如,如果文本是".state.Last",则显示为".state.last"

任何人都知道为什么会发生这种情况以及是否有解决此问题的方法。

谢谢。

【问题讨论】:

    标签: python enthought traits traitsui


    【解决方案1】:

    默认情况下,编辑器在文本上调用字符串方法capitalize。我不知道为什么;也许作者认为这将有助于在 UI 中实施一致的样式。

    您可以使用CheckListEditorformat_func 参数覆盖此行为。这是一个例子。 (我还使用了Itemlabel 参数来覆盖编辑器标签的大小写。)

    from traits.api import HasTraits, List, on_trait_change
    from traitsui.api import Item, View, CheckListEditor
    
    
    class Foo(HasTraits):
        stuff = List()
    
        traits_view = View(Item('stuff', style='custom', label='stuff',
            editor=CheckListEditor(values=['.state.First', '.state.Last', '.state.Any'],
                                   format_func=lambda x: x)))
    
        @on_trait_change('stuff[]')
        def show_stuff(self):
            print "stuff =", self.stuff
    
    
    if __name__ == "__main__":
        f = Foo()
        f.configure_traits()
    

    或者,您可以将values 作为元组列表提供。每个元组都有(obj, label) 的形式,其中label 是UI 中显示的字符串,obj 是添加到列表中的对象。使用此表单时,标签在 UI 中保持不变。例如,

        traits_view = View(Item('stuff', style='custom', label='stuff',
            editor=CheckListEditor(values=[('.state.First',)*2,
                                           ('.state.Last',)*2,
                                           ('.state.Any',)*2])))
    

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多