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

19
# -*- 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_())

我想在自定义小部件中使用样式表添加边框,但样式表似乎无效,有什么问题吗?


你尝试过在QWidget之前去掉句号吗? - justengel
虽然您已经收到了一个看似足够的答案,请考虑更具体地说明“未按预期工作”的问题,即使现在您已经得到了答案,也请说明您具体期望什么以及哪个部分没有正常工作。 - Oliver
好的,下次我会做得更好~ - Anke_Pet
2个回答

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 文档中的 StyleSheet Syntax 指南。

出于某种原因,删除点选择器是使这个工作对我起作用的不同之处! - LOlliffe

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

3
使用下面的代码能更好地确保文件被正确关闭吗?with open("mystylesheet.css", 'r') as file: sheet = file.read() anyQelement.setStyleSheet(sheet)是的,使用上述代码可以确保文件被正确关闭。 - rwalroth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接