如何给PyQt的QTabWidget添加颜色

3
我有一个包含QTabWidget的PyQt主窗口。选项卡窗口包含一些按钮和文本框。
我想要着色整个标签页背景而不仅仅是在标签栏区域.
我没有使用样式表,而且希望使用调色板,因为我已经在使用调色板了。但如果样式表是唯一的选择,那也行。
我试过:
p = self.tabWidget.palette()
p.setColor(self.tabWidget.backgroundRole(), Qt.red)
self.tabWidget.setPalette(p)

这会产生一个红色的选项卡区域,但是主要背景仍然是白色。

关闭自动填充,使用self.tabWidget.setAutoFillBackground(False)会有一点不同,各个选项卡现在被漂亮地着色,但是主体仍然是白色的。

尝试一下样式表:

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

这会给选项卡的主体着色,但它也会让所有其他元素变成黄色,包括按钮和文本框。同时,所有突出的小标签都是黄色的。自动填充没有任何影响。

你有没有什么想法可以着色选项卡的主体,但不破坏其他小部件?

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

2个回答

4
使用样式表,你可以做到这样:
stylesheet = """ 
    QTabBar::tab:selected {background: gray;}
    QTabWidget>QWidget>QWidget{background: gray;}
    """

self.setStyleSheet(stylesheet)

这里的尖括号允许引用小部件的子元素。它告诉Qt在应用样式表时将其应用于应用程序中任何QTabWidget的孙子元素(请参阅Qt StlyleSheet syntax)。选项卡“body”是QTabWidget的孙子元素。
它的呈现效果不是很好,您需要调整一些设置。请参阅Qt文档上的Customizing QTabWidget and QTabBar

这个效果很好。我不得不给角落添加了半径并改变了文字颜色,但总体上达到了我想要的效果。谢谢。 - JohnSantaFe
有没有办法使选项卡的背景透明化? - tokageKitayama

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)

之前有一个类似的问题,看起来在给选项卡上色方面,样式表可能是唯一适用于所有平台的解决方案。不过,具体取决于你想要实现什么效果。
我对那个问题的回答重新实现了选项卡栏的绘制事件,在Linux上运行得很好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接