使用Qt样式表的类实例的样式

2024-09-28 12:15:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个玩具PyQt5应用程序的CSS样式表。我已经成功地定义了类MainWindow(QMainWindow)DefaultWidget(QWidget),后者包含两个按钮,我正在尝试对其进行样式化。你知道吗

使用C++ DOCS,我一直在尝试利用^ {CD3>}示例,提供在:<强>Link>/p>

但是,在python应用程序中,实例名的#表示法似乎没有转换为外部CSS文件的类似self.setStyleSheet()方法。你知道吗

Python文件(如果有打字错误,请道歉-从另一台计算机转录):

import sys
from PyQt5.Widgets import QApplication, QMainWindow, QWidget, QPushButton, QHBoxLayout

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setStyleSheet(open('./style.css').read())
        try:
            self.setCentralWidget(DefaultWidget())
        else:
            some_error_stuff_for_troubleshooting
        self.show()

class DefaultWidget(QWidget):
    def __init__(self):
        super().__init__()
        okButton = QPushButton('OK')
        cancelButton = QPushButton('Cancel')
        hbox = QHBoxLayout()
        hbox.addWidget(okButton)
        hbox.addWidget(cancelButton)
        self.setLayout(hbox)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

在CSS文件中…

QWidget.MainWindow {
    background: blue
}
QPushButton {
    background-color: beige
}
QPushButton???okButton {
    background-color: green
}

在我放置???的地方,我尝试了很多东西(尝试遍历类QPushButton.okButtonQPushButton.DefaultWidget.okButtonDefaultWidget.okButton,使用.#:::符号等等),但在这一点上,它比有根据的猜测更随机。你知道吗

我想让CSS在类名之外处理一些命名约定样式,以帮助尽可能多地从python文件中提取样式。即使符号碰巧是正确的,我是否没有看到我预期的颜色变化,由于继承的风格?你知道吗


编辑:如果有人无意中发现了这一点,.setObjectName()方法或在实例化小部件时声明object name选项。另外,如果您感兴趣的话,这里还有一个类似的问题,就是为什么不使用某种默认名称。 PyQt: is there an better way to set objectName in code?


Tags: 文件selfinitsys样式csspyqt5background
1条回答
网友
1楼 · 发布于 2024-09-28 12:15:37

试试看:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QHBoxLayout

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        #                       open('./style.css').read())
        self.setStyleSheet("""
            QWidget {
                background: blue;
            }
            QPushButton {
                background-color: beige;
            }
            QPushButton#okButton {                             /*    < - #okButton      */
                background-color: green;
            }
        """)

        defaultWidget = DefaultWidget()
        self.setCentralWidget(defaultWidget)

        self.show()

class DefaultWidget(QWidget):
    def __init__(self):
        super().__init__()

        okButton = QPushButton('OK', objectName="okButton")     # + objectName="okButton"

        cancelButton = QPushButton('Cancel')
        hbox = QHBoxLayout()
        hbox.addWidget(okButton)
        hbox.addWidget(cancelButton)
        self.setLayout(hbox)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

enter image description here

相关问题 更多 >

    热门问题