在 python pyqt4 中显式设置样式 sheet?

explicitly setting style sheet in python pyqt4?

在pyqt中设置样式的标准方式sheet是这样的:

MainWindow.setStyleSheet(_fromUtf8("/*\n"
"gridline-color: rgb(85, 170, 255);\n"
"QToolTip\n"
"{\n"
"    border: 1px solid #76797C;\n"
"    background-color: rgb(90, 102, 117);;\n"
"    color: white;\n"
"    padding: 5px;\n"
"    opacity: 200;\n"
"}\n"
"#label_3{\n"
"    background-color:rgb(90, 102, 117);\n"
"    color:white;\n"
"    padding-left:20px;\n"
" \n"
"}\n"
"#label_2{\n"
"    color:white;\n"
"    padding-left:20px;\n"
" \n"
"}\n"

但是像我们linkhtml中的风格sheet <link rel="stylesheet" href="style.css"> .我们不能在 pyqt 中做同样的事情吗?它有助于组织事情。

目前设置样式表的方式主要有两种。第一种是使用setStyleSheet方法:

widget.setStyleSheet("""
    QToolTip {
        border: 1px solid #76797C;
        background-color: rgb(90, 102, 117);
        color: white;
        padding: 5px;
        opacity: 200;
    }
    """)

这只需要一个字符串,因此外部资源需要明确地从文件中读取,或者从模块中导入。

第二种方法是使用-stylesheet command-line argument,它允许将外部qss资源指定为路径:

python myapp.py -stylesheet style.qss

这开启了诱人的黑客攻击的可能性,因为很容易操纵传递给 QApplication 构造函数的参数,并显式插入默认样式表:

import sys

args = list(sys.argv)
args[1:1] = ['-stylesheet', 'style.qss']

app = QtGui.QApplication(args)

(在列表的开头插入额外的参数确保用户仍然可以使用自己的样式表覆盖默认值)。