【发布时间】:2014-06-09 02:41:34
【问题描述】:
在 PySide 中,我正在尝试更改简单 GUI 窗口(QLabel 对象)的整体样式,如 PySide 文档中所述:
http://srinikom.github.io/pyside-docs/PySide/QtGui/QStyle.html#detailed-description
也就是说,如该链接所述,我想使用 setStyle 将整体 GUI 格式更改为预定义的 GUI 样式之一(例如,从 Windows 到 Cleanlooks)。 (正如我在下面提到的,这个目标与使用setStyleSheet 调整颜色等不同,我已经知道该怎么做)。
在开始之前,我首先检查了我可用的样式类型:
print QtGui.QStyleFactory.keys()
这揭示了许多可用的样式,包括“Cleanlooks”。
其次,根据来自三个来源(PySide、ZetCode 和 Nullege)的文档,我尝试将 QLabel 样式更改为“Cleanlooks”:
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
不幸的是,这并没有改变。事实上,我输入的任何内容都没有改变我的 Hello World 小部件中的单个像素。不确定是否相关,但是当我打印上一行代码的输出时,我总是得到None。完整的示例代码在首屏下方。
我在 Windows 7 中,Python 2.7 在 iPython 中运行。根据回复,这似乎也是 Windows 7 中 PyQt4 的问题,而不仅仅是 PySide。
为了更加清楚,我不是在问如何使用setStyleSheets 来调整我的小部件。这已经得到了很好的解决:
Styling with classes in Pyside + Python
我尝试的代码示例(我尝试的其他排列显示在 cmets 中):
# coding: utf-8
import sys
from PySide import QtGui
class HelloWorldApp(QtGui.QLabel):
def __init__(self):
QtGui.QLabel.__init__(self, "Hello, world!")
self.initUI()
def initUI(self):
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
self.show()
def main():
#QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks')) #crashes program
qt_app=QtGui.QApplication(sys.argv)
#QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks')) #does nothing
exHell=HelloWorldApp()
sys.exit(qt_app.exec_())
if __name__=="__main__":
main()
【问题讨论】:
-
您尝试过其他可用的样式吗?以
plastique为例。 -
@qurban。是的:我尝试了打印按键时列出的所有样式,其中包括--[u'Windows', u'WindowsXP', u'WindowsVista', u'Motif', u'CDE', u'Plastique', u'Cleanlooks']。我尝试了使用/不使用 unicode 符号 (u)。
-
对于它的价值,我在 PySide 上遇到了同样的问题 - 但奇迹般地,它与 PyQt 一起工作。
-
@Deusdies 呃。我正在使用 Spyder,所以不要认为我可以使用 PyQt。 :O 我会在 PySide 开发者网站上搜索,试图引起人们的注意。希望我没有做傻事。
-
QLabel只是纯背景上的一些文本,因此您唯一的小部件不会显示(或很难分辨)任何样式更改。尝试使用不同的小部件进行测试,例如QComboBox,您应该会看到样式发生了变化。
标签: python qt user-interface pyqt pyside