为了账号安全,请及时绑定邮箱和手机立即绑定

为什么一个类继承另一个类不会产生与“另一个类”相同的结果?

为什么一个类继承另一个类不会产生与“另一个类”相同的结果?

狐的传说 2021-12-21 17:03:18
我正在使用 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_server是一个实例QWidget?样式表只定义background-color: #333333和color: #dddddd。提前致谢。编辑:我相信样式表没有正确应用于AppearanceTab,但是我不知道为什么会看到它只是从QWidget.编辑2:可以在 github上找到 MCVE(以及我的项目的其余部分)。
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

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

遗产

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

如果我们想在 QGroupBox 及其子项上设置颜色,我们可以这样写:

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

所以你可能想要改变

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

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

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


查看完整回答
反对 回复 2021-12-21
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

试试看:


from PyQt5 import QtWidgets


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.setStyleSheet("QWidget, QWidget * {color: #dddddd; background-color: #333333;}") #note: Tried this however it didn't work.

        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")




style = """

QWidget {

    color: #dddddd;

    background-color: #333333;

}


QMainWindow {

    color: #dddddd;

    background-color: #333333;

}


QTabWidget {

    background-color: #333333;

    color: #dddddd;

}

QTabBar {

    color: #dddddd;

    background-color: #333333;

}

"""


if __name__ == "__main__":

    QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create("Fusion"))

    app = QtWidgets.QApplication([])

    app.setStyleSheet(style)                       # < ---

    d = SettingsDialog()

    print(app.exec_())


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号