1

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

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

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

谢谢。

4

1 回答 1

4

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

您可以format_func使用CheckListEditor. 这是一个例子。(我还使用了 的label参数Item来覆盖编辑器标签的大写。)

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])))
于 2014-05-21T12:35:15.570 回答