如何将一个 QtWidget(例如 QTreeWidget)的样式(sheet)应用到另一个小部件(例如 QLabel)?

How can I apply the style(sheet) of one QtWidget (e. g. QTreeWidget) to another widget (e. g. QLabel)?

我 运行 以下 MCVE 片段在两个不同的系统上产生了屏幕截图中描述的 windows。如您所见,它们的边框样式不同。我不介意。两个系统的边框样式允许不同。但是,对于一个系统,我希望两个 QtWidgets 的边框样式相同。 QLabel 的边框样式似乎还没有设置。

如何将 QLabel 的边框样式设置为与 QTreeWidget 相同的边框样式?


MCVE 片段

import sys
from PyQt5.QtWidgets import *

class widget(QWidget):
    def __init__(self):
        super().__init__()
        treewidget = QTreeWidget(self)
        label = QLabel(self)
        label.setStyleSheet("background-color: white; min-height: 200px;")
        grid = QGridLayout()
        grid.setSpacing(10)
        grid.addWidget(treewidget, 1, 0)
        grid.addWidget(label, 2, 0)
        self.setLayout(grid)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    f = widget()
    sys.exit(app.exec_())

来自两个不同系统的屏幕截图

您的一般问题无法解决,原因如下:

  • 一个小部件的属性不被其他小部件共享。

  • 某些属性的值有默认值,高度依赖于Qt开发者的决定,比如QLabel的边,即边可以修改但默认值不能未读。

  • 并不是所有的视觉元素都可以用Qt Style修改Sheet,实际上它是非常有限的,通常最好创建一个自定义的QStyle。

但是您的特定问题可以解决,在这种情况下我们将边框设置为 none。

from PyQt5 import QtWidgets

QSS = '''
QTreeWidget{ 
    border: None 
}
QLabel{
    background-color: white; 
    min-height: 200px;
}
'''

class widget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        treewidget = QtWidgets.QTreeWidget()
        label = QtWidgets.QLabel()

        grid = QtWidgets.QGridLayout(self)
        grid.setSpacing(10)
        grid.addWidget(treewidget, 1, 0)
        grid.addWidget(label, 2, 0)
        self.show()

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.setStyleSheet(QSS)
    f = widget()
    sys.exit(app.exec_())