首页 > 解决方案 > 为什么继承另一个类的类不会产生与“另一个类”相同的结果?

问题描述

我正在使用 PyQt5 在 Python 中开发应用程序。这是有问题的代码:

class Dialog(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.layout = QtWidgets.QGridLayout()
        self.main = QtWidgets.QWidget()
        self.main.setLayout(self.layout)

        self.setStyleSheet(QMainWindowStyle)
        self.setCentralWidget(self.main)
        self.show()

class AppearanceTab(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

class SettingsDialog(Dialog):
    def __init__(self):
        super().__init__()
        self.tabs = QtWidgets.QTabWidget(self)
        self.tabs.setStyleSheet(QTabWidgetStyle)
        self.layout.addWidget(self.tabs)

        self.tab_appearance = AppearanceTab()
        self.tab_appearance.setStyleSheet(QWidgetStyle)
        self.tab_appearance_layout = QtWidgets.QGridLayout()
        self.tab_appearance.setLayout(self.tab_appearance_layout)
        self.tabs.addTab(self.tab_appearance, "Appearance")

        self.tab_server = QtWidgets.QWidget()
        self.tab_server.setStyleSheet(QWidgetStyle)
        self.tab_server_layout = QtWidgets.QGridLayout()
        self.tab_server.setLayout(self.tab_server_layout)
        self.tabs.addTab(self.tab_server, "Server")

为什么什么时候self.tab_appearance是一个AppearanceTab实例(应该是 的副本QWidget)它具有与什么时候的实例不同的样式(self.tab_server即背景颜色更改)?self.tab_serverQWidget

样式表只定义了background-color: #333333color: #dddddd

提前致谢。

编辑:

我相信样式表没有被正确应用到AppearanceTab,但是我不知道为什么会看到它只是继承自QWidget.

编辑2:

可以在 github上找到 MCVE(以及我的项目的其余部分) 。

标签: pythonpython-3.xpyqtpyqt5qtstylesheets

解决方案


在文档中,有一段关于继承和样式的段落:

遗产

在经典 CSS 中,当项目的字体和颜色没有明确设置时,它会自动从父项继承。使用 Qt 样式表时,小部件不会自动从其父小部件继承其字体和颜色设置。

如果我们想为 QGroupBox 及其子对象设置颜色,我们可以这样写:

qApp->setStyleSheet("QGroupBox, QGroupBox * { color: red; }");

所以你可能想改变

QMainWindowStyle = QMainWindow {color: #dddddd; background-color: #333333;}

QMainWindowStyle = QMainWindow, QMainWindow * {color: #dddddd; background-color: #333333;} 

这样主窗口的所有子窗口小部件都具有相同的样式。


推荐阅读