我似乎无法让样式表在 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_())
结果是:
如果我将 from PySide import QtGui
更改为 from PyQt4 import QtGui
,我会收到以下结果:
为什么样式表在 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/