如何为PyQt QTabwidget着色

时间:2013-11-06 05:27:02

标签: python pyqt qtstylesheets qtabwidget qpalette

我有一个包含QTabWidget的PyQt主窗口。选项卡小部件包含几个按钮和文本框。

我想为整个标签背景着色,而不仅仅是标签栏区域中的标签。

我没有使用样式表,因为我已经在使用调色板,所以我更喜欢使用调色板,但如果样式表是唯一的选择,那就没关系。

我试过了:

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。

2 个答案:

答案 0 :(得分:1)

使用StyleSheet,你可以这样做:

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

self.setStyleSheet(stylesheet)

V形符号允许引用小部件的子节点。它告诉Qt在你的应用程序中的任何QTabWidget的孙子上应用样式表(参见Qt StlyleSheet syntax)。标签“body”是QTabWidget的子孙。

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

答案 1 :(得分:0)

如果您只想为标签主体的背景着色,请设置其顶级内容小部件的背景角色:

    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重新实现了标签栏的绘图事件,效果非常好 - 但仅限于Linux。