explicitly setting style sheet in python pyqt4?

2019-06-14 13:26发布

问题:

In pyqt standard way for setting style sheet is like this:

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"

But like we link the stylesheet in html <link rel="stylesheet" href="style.css"> .can't we do the same in pyqt?It helps in organizing the things.

回答1:

There are currently only two main ways to set a stylesheet. The first is to use the setStyleSheet method:

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

This will only take a string, so an external resource would need to be explicitly read from a file, or imported from a module.

The second method is to use the -stylesheet command-line argument, which allows an external qss resource to be specified as a path:

python myapp.py -stylesheet style.qss

This opens up the possibility of a tempting hack, since it is easy enough to manipulate the args passed to the QApplication constructor, and explicitly insert a default stylesheet:

import sys

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

app = QtGui.QApplication(args)

(Inserting the extra arguments at the beginning of the list ensures that it is still possible for the user to override the default with their own stylesheet).