1

我正在使用 TraitsUI 制作 GUI。我希望能够编辑更多关于 GUI 实际外观的信息。例如,我希望能够更改某些 Str 对象的字体,更改某些框的背景颜色,使某些框更大且字体更大(粗体/斜体等)。

这很容易做到吗?我一直在玩下面的玩具示例。但是我所做的所有尝试都没有奏效。我需要编辑视图或项目对象来执行此操作吗?还是我需要创建自定义编辑器?

如果有人知道一个简单的例子来强调如何做这些事情,将不胜感激。

谢谢,

蒂姆

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()
4

1 回答 1

3

我找到了解决这个问题的方法。我同意 traitsui 包在某些条件下并不真正适合格式更改。我可以通过使用自定义处理程序访问控制器然后使用 PyQt 对象更改格式来做到这一点。

在下面单击 Pool 复选框将更改背景颜色。您还可以访问其他子小部件以执行更具体的任务。

如果有人知道更好/更多基于特征的方式,我会很感兴趣。

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()
于 2015-01-18T18:19:15.097 回答