PySide中的样式表不工作

2024-04-25 22:08:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎不能让样式表在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中工作?在


Tags: fromimportselfinitexampledefsys样式表
1条回答
网友
1楼 · 发布于 2024-04-25 22:08:10

当涉及样式表时,QWidget类可能会有不同的处理。为了使您的示例正常工作,您需要像下面这样显式地启用样式表:

    testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)

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

建议只有QWidget子类才需要设置WA_StyledBackground属性。如果{}被这样的子类取代:

^{pr2}$

那么这个例子在PyQt或PySide中都不再有效。在

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

相关问题 更多 >