python - PySide 中的样式表不起作用

标签 python pyqt pyside qwidget qtstylesheets

我似乎无法让样式表在 PySide 中工作。是否有一些与 PyQt 不同的特殊语法?

这是一个小示例代码:

import sys
from PySide import QtGui

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        okButton = QtGui.QPushButton("OK")
        cancelButton = QtGui.QPushButton("Cancel")
        testWidget = QtGui.QWidget()
        hbox2 = QtGui.QHBoxLayout()
        hbox2.addWidget(okButton)
        testWidget.setLayout(hbox2)
        testWidget.setObjectName("testWidget")
        testWidget.setStyleSheet("QWidget#testWidget { \n     border: 2px solid gray; \n     border-radius: 3px; \n }")
        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(testWidget)
        hbox.addWidget(cancelButton)

        self.setLayout(hbox)    
        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('Expample')    
        self.show()

app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

结果是:

PySide

如果我将 from PySide import QtGui 更改为 from PyQt4 import QtGui,我会收到以下结果:

PyQt4

为什么样式表在 PySide 中不起作用?

最佳答案

在样式表方面,QWidget 类可能会受到不同的对待。为了让您的示例正常工作,您需要显式启用样式表,如下所示:

    testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)

但是,我不太清楚为什么 PyQt 和 PySide 在这方面表现不同。 PyQt 作者的邮件列表帖子:

表明只有QWidget子类需要设置WA_StyledBackground属性。事实上,如果 testWidget 被这样的子类替换:

class SubWidget(QtGui.QWidget): pass
...
testWidget = SubWidget()        
# testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)

那么该示例不再适用于 PyQt 或 PySide。

这意味着 PySide 行为对于 QWidget 的非子类来说是错误的。可能存在某种元对象错误,使 PySide QWidget 类看起来像 Qt 的子类。

关于python - PySide 中的样式表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32313469/

相关文章:

python - 如何使用 Python 获取电子邮件的收件人?

python - 单击 PyQt 表项时更改属性

python - 如何从子窗口小部件类中打印父窗口小部件的名称?

python - 如何找到子字符串并在 QTextEdit 中突出显示它?

python - sqlite python sqlite3.OperationalError : database is locked

python - 在 Python 中读写环境变量?

python - PyQt - 如何淡化对话框后面的桌面背景(类似于 Windows UAC)?

qt - PySide:在没有 ui.retranslateUi 的情况下在运行时动态更改语言

qt - 在 QTreeView 中用鼠标悬停突出显示项目?

python - 我该如何制作没有小部件的框架?