PySide 中的样式表不起作用
Stylesheet in PySide not working
我似乎没有让样式表在 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
class 在涉及样式表时可能会有不同的处理方式。为了使您的示例正常工作,您需要像这样显式启用样式表:
testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)
但是,我不太清楚为什么 PyQt 和 PySide 在这方面表现不同。这个邮件列表 post 来自 PyQt 的作者:
表示只有 QWidget
的 subclasses 需要设置 WA_StyledBackground
属性。事实上,如果 testWidget
被这样的 subclass:
取代
class SubWidget(QtGui.QWidget): pass
...
testWidget = SubWidget()
# testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)
然后该示例在 PyQt 或 PySide 中不再有效。
这意味着 PySide 行为对于 QWidget
的非子 class 是错误的。可能存在某种元对象错误,使 PySide QWidget
class 看起来像是 Qt 的子class。
我似乎没有让样式表在 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
class 在涉及样式表时可能会有不同的处理方式。为了使您的示例正常工作,您需要像这样显式启用样式表:
testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)
但是,我不太清楚为什么 PyQt 和 PySide 在这方面表现不同。这个邮件列表 post 来自 PyQt 的作者:
表示只有 QWidget
的 subclasses 需要设置 WA_StyledBackground
属性。事实上,如果 testWidget
被这样的 subclass:
class SubWidget(QtGui.QWidget): pass
...
testWidget = SubWidget()
# testWidget.setAttribute(QtCore.Qt.WA_StyledBackground)
然后该示例在 PyQt 或 PySide 中不再有效。
这意味着 PySide 行为对于 QWidget
的非子 class 是错误的。可能存在某种元对象错误,使 PySide QWidget
class 看起来像是 Qt 的子class。