我有一个包含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。
答案 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。