【发布时间】:2020-05-28 09:48:05
【问题描述】:
在 PyQt5 中,我从 QTabWidget 得到了一些意想不到的行为,背景似乎是白色而不是默认的表单颜色(大致为浅灰色)。这是一个例子:
# QTabWidget2.py
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QHBoxLayout, QVBoxLayout, QTabWidget, \
QGraphicsView, QFrame, QGridLayout
from PyQt5.QtGui import QPalette
from PyQt5.Qt import Qt
def main():
app = QApplication([])
mainForm = MainForm()
mainForm.show()
app.exec()
# end main
class MainForm(QWidget):
def __init__(self):
super().__init__()
# set default form size and location
self.setGeometry(300, 300, 800, 600)
# declare a graphics view
self.bigLabel = QLabel('Big Label')
self.setFontSize(self.bigLabel, 18)
self.bigLabel.setAlignment(Qt.AlignCenter)
self.bigLabel.setFrameStyle(QFrame.Panel)
# declare a small label and a button
self.label = QLabel('Label')
self.setFontSize(self.label, 12)
self.label.setAlignment(Qt.AlignCenter)
self.button = QPushButton('Button')
self.setFontSize(self.button, 12)
self.vboxLayout = QVBoxLayout()
self.vboxLayout.addWidget(self.label)
self.vboxLayout.addWidget(self.button)
self.vboxLayout.addStretch(1)
self.hboxLayout = QHBoxLayout()
self.hboxLayout.addWidget(self.bigLabel, 10)
self.hboxLayout.addLayout(self.vboxLayout, 1)
self.containerWidget = QWidget()
self.containerWidget.setLayout(self.hboxLayout)
self.tabWidget = QTabWidget()
self.tabWidget.addTab(self.containerWidget, 'My Tab')
self.gridLayout = QGridLayout()
self.gridLayout.addWidget(self.tabWidget)
self.setLayout(self.gridLayout)
# end function
def setFontSize(self, widget, fontSize):
font = widget.font()
font.setPointSize(fontSize)
widget.setFont(font)
# end function
# end class
if __name__ == '__main__':
main()
这是它在 Ubuntu 18.04 上的样子:
我的问题是,如何使QTabWidget 背景与表单(在本例中为QWidget)背景颜色相同?
我尝试过的一些事情:
许多小部件都有这样的功能:
someWidget.setBackgroundBrush(self.palette().brush(QPalette.Window))
但 QTabWidget 似乎没有 setBackgroundBrush 或我能找到的等价物。
我发现一些帖子建议使用样式表来实现这一点,但我不确定如何设置它。我需要子类QTabWidget 来实现这一点吗?另外,我怎样才能获得默认的背景表单颜色?我可以使用简单的猜测和检查来接近,但是它可能会在不同的平台上略有变化,所以这不是特别理想的。
--- 编辑---
啊啊啊啊啊啊啊!!! Qt 有时真的很令人沮丧。如果我在声明 QTabWidget 之后添加它:
widgetColor = self.palette().color(QPalette.Background)
widgetColorRgba = widgetColor.red(), widgetColor.green(), widgetColor.blue(), widgetColor.alpha()
print('widgetColorRgb = ' + str(widgetColorRgba))
styleSheetString = 'background-color: rgba(' + str(widgetColorRgba[0]) + ', ' + \
str(widgetColorRgba[1]) + ', ' + str(widgetColorRgba[2]) + ', ' + str(widgetColorRgba[3]) + ');'
print('styleSheetString = ' + str(styleSheetString))
# this line works
self.tabWidget.setStyleSheet(styleSheetString)
# this line does not work !!!
self.tabWidget.tabBar().setStyleSheet(styleSheetString)
它正确地将 QTabWidget 的正文更改为默认的表单背景颜色,但它不会更改选项卡的颜色!!
【问题讨论】:
标签: python pyqt pyqt5 qtabwidget