Изменение шрифтов, размера, цвета фона черт в TraitsUI
Я использую TraitsUI для создания графического интерфейса. Я хочу иметь возможность редактировать больше о том, как на самом деле выглядит графический интерфейс. Например, я хочу иметь возможность изменить шрифт некоторых объектов Str, изменить цвет фона некоторых блоков, сделать несколько блоков намного больше с большими размерами шрифта (полужирный / курсив и т. Д.).
Это легко сделать? Я играл с игрушечным примером ниже. Но все мои попытки не сработали. Нужно ли редактировать объекты View или Item для этого? Или мне нужно создавать собственные редакторы?
Простой пример, показывающий, как делать эти вещи, был бы признателен, если бы кто-нибудь знал об этом.
Спасибо,
Тим
class House(HasTraits):
address = Str
bedrooms = Int
pool = Bool
price = Int
traits_view =View(
Group(Item('address', style="readonly"), Item('bedrooms'), Item('pool'), Item('price'),show_border=True)
)
hs = House()
hs.configure_traits()
1 ответ
Я нашел способ решения этой проблемы. Я бы согласился, что пакет traitsui на самом деле не подходит для изменения форматирования при определенных условиях. Я смог сделать это с помощью пользовательского обработчика для доступа к контроллеру, а затем с помощью объекта PyQt для изменения форматирования.
При установке флажка "Пул" изменится цвет фона. Вы также можете получить доступ к другим дочерним виджетам, чтобы выполнять более конкретные задачи.
Мне было бы интересно, если кто-нибудь знает лучший / более качественный способ.
from traits.api import *
from traitsui.api import *
import PyQt4
class HouseHandler(Handler):
def object_pool_changed(self,info):
if info.object.pool:
print info.ui.control
print info.ui.control.children()
qtObject = info.ui.control
palette = qtObject.palette()
qtObject.setAutoFillBackground(True)
palette.setColor(qtObject.backgroundRole(), PyQt4.QtCore.Qt.red)
qtObject.setPalette(palette)
#or with style sheets
#info.ui.control.setStyleSheet('background-color: red')
else:
info.ui.control.setStyleSheet('background-color: None')
class House(HasTraits):
address = Str
bedrooms = Int
pool = Bool
price = Int
traits_view =View(
Group(Item('address', style="readonly"), Item('bedrooms'), Item('pool'), Item('price'),show_border=True),
handler = HouseHandler()
)
hs = House()
hs.configure_traits()