我似乎没有让Stylesheets在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中不起作用?
答案 0 :(得分:2)
对于样式表, testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)
类可能会有不同的处理方式。为了使您的示例正常工作,您需要显式启用样式表,如下所示:
QWidget
然而,我并不完全知道为什么PyQt和PySide在这方面表现不同。这篇来自PyQt作者的邮件列表帖子:
建议只有WA_StyledBackground
的子类需要设置testWidget
属性。事实上,如果class SubWidget(QtGui.QWidget): pass
...
testWidget = SubWidget()
# testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)
被这样的子类取代:
QWidget
然后该示例不再适用于PyQt或PySide。
这意味着对于QWidget
的非子类,PySide行为是错误的。可能存在某种元对象错误,这使得PySide x = {TimeObject[DateObject[{2015, 09, 9, 01, 01, 01}]],
TimeObject[DateObject[{2000, 01, 1, 09, 09, 09}]]}
类看起来像Qt的子类。