如何在PyQt中为自定义组件应用样式表

19 投票
2 回答
76036 浏览
提问于 2025-04-17 22:57
# -*- coding: utf-8 -*-

import sys
from PyQt4.QtGui import *  
from PyQt4.QtCore import * 

class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setFixedWidth(200)
        self.setFixedHeight(200)

        stylesheet = \
            ".QWidget {\n" \
            + "border: 20px solid black;\n" \
            + "border-radius: 4px;\n" \
            + "background-color: rgb(255, 255, 255);\n" \
            + "}"
        self.setStyleSheet(stylesheet)

if __name__ == '__main__':

    app = QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())

我想给一个自定义的小部件加个边框,用样式表来实现,但样式表好像不起作用,哪里出问题了呢?

2 个回答

12

在你的项目文件夹里添加一个基本的CSS文件,命名为mystylesheet.css。像Atom这样的多语言编辑器最适合处理这些文件。如果你把它命名为CSS文件,语法高亮功能会正常工作。

然后去掉那个点;qt会知道你在说什么。

mystylesheet.css

QWidget {
    border: 20px solid black;
    border-radius: 10px;
    background-color: rgb(255, 255, 255);
}
anyQelement.setStyleSheet(open('mystylesheet.css').read())
37

首先:在你的例子中添加一个实际的组件:

    self.widget = QWidget(self)
    layout = QVBoxLayout(self)
    layout.addWidget(self.widget)

其次,给自己一个建议,使用三重引号:

    self.widget.setStyleSheet("""
        QWidget {
            border: 20px solid black;
            border-radius: 10px;
            background-color: rgb(255, 255, 255);
            }
        """)

你例子中的点选择器是多余的。它的作用是指定只选择QWidget本身的实例,而不是QWidget的子类。你可以查看Qt文档中的样式表语法指南。

撰写回答