TraitsUI CheckListEditor меняет регистр значений
Я использую CheckListEditor
чтобы позволить пользователю выбрать подмножество доступных опций. С установленным стилем 'custom', он отображает список контрольных списков с метками рядом. Это то, что я хотел. Но одна проблема заключается в том, что текстовое содержимое отображается с измененным регистром в некоторых случаях - я не понимаю, почему это происходит.
Например, если текст ".state.Last"
отображается как ".state.last"
,
Кто-нибудь знает, почему это происходит и есть ли решение этой проблемы.
Благодарю.
1 ответ
По умолчанию редактор вызывает строковый метод capitalize
по тексту. Я не знаю почему; возможно, автор подумал, что это поможет обеспечить согласованный стиль в пользовательском интерфейсе.
Вы можете изменить это поведение с помощью 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
это строка, которая отображается в пользовательском интерфейсе и obj
это объект, добавленный в список. Когда эта форма используется, метка остается неизменной в пользовательском интерфейсе. Например,
traits_view = View(Item('stuff', style='custom', label='stuff',
editor=CheckListEditor(values=[('.state.First',)*2,
('.state.Last',)*2,
('.state.Any',)*2])))