如何给PyQt QTabwidg上色

2024-05-16 00:20:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个PyQt主窗口,其中包含一个QTabWidget。tab小部件包含几个按钮和文本框。

我想给整个标签背景上色,而不仅仅是标签栏区域的标签。

我不使用样式表,我更喜欢使用调色板,因为我已经在使用调色板,但如果样式表是唯一的选项,那就可以了。

我试过:

p = self.tabWidget.palette()
p.setColor(self.tabWidget.backgroundRole(), Qt.red)
self.tabWidget.setPalette(p)

这将生成一个红色的选项卡栏区域,但主背景仍为白色。

关闭自动填充,使用 self.tabWidget.setAutoFillBackground(假) 有一点不同,个别标签现在是很好的颜色,但主体仍然是白色的。

尝试一下样式表:

self.tabWidget.setStyleSheet("QWidget {background-color: yellow }")

这将使选项卡的主体变为黄色,但也将其他所有内容(包括按钮和文本框)变为黄色。而且,所有贴在上面的小标签都是黄色的。自动填充没有任何影响。

关于如何给标签的主体上色而不删除其他小部件有什么想法吗?

我使用的是PyQt版本4.10和Python 2.7。


Tags: self区域部件标签按钮样式表pyqt选项卡
2条回答

使用样式表,可以执行以下操作:

stylesheet = """ 
    QTabBar::tab:selected {background: gray;}
    QTabWidget>QWidget>QWidget{background: gray;}
    """

self.setStyleSheet(stylesheet)

符号允许引用小部件的子部件。它告诉Qt将样式表应用于应用程序中任何QTabWidget的孙子(请参见Qt StlyleSheet syntax)。标签“body”是QTabWidget的孙子。

它的渲染效果不是很好,你必须调整一些设置。请参阅Customizing QTabWidget and QTabBar上的Qt文档。

如果只想给选项卡主体的背景上色,请设置其顶级内容小部件的背景角色:

    widget = QtGui.QWidget(tabwidget)
    widget.setAutoFillBackground(True)
    palette = widget.palette()
    palette.setColor(widget.backgroundRole(), QtCore.Qt.red)
    widget.setPalette(palette)
    # add layout and child widgets
    ...
    self.addTab(widget, label)

一个similar question to this以前出现过,而且看起来,当涉及到制表符的着色时,样式表可能是唯一可以在所有平台上工作的解决方案。不过,这完全取决于你想达到的目标。

我的answer to that question重新实现了选项卡栏的paint事件,并且工作得非常好——但仅在Linux上。

相关问题 更多 >