【问题标题】:Applying setStyle to QLabel in PySide/PyQt在 PySide/PyQt 中将 setStyle 应用于 QLabel
【发布时间】: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 样式之一(例如,从 WindowsCleanlooks)。 (正如我在下面提到的,这个目标与使用setStyleSheet 调整颜色等不同,我已经知道该怎么做)。

在开始之前,我首先检查了我可用的样式类型:

print QtGui.QStyleFactory.keys()

这揭示了许多可用的样式,包括“Cleanlooks”。

其次,根据来自三个来源(PySideZetCodeNullege)的文档,我尝试将 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


【解决方案1】:

我找到的回答了我的问题的最有用的资源是这个精彩的小部件库:

Widget Gallery

它显示了几乎每种类型的小部件在不同样式下的外观。

事实证明,QLabel 的“问题”不是错误,而是裸露的 QLabel 非常简单,以至于更改其样式很少会影响其外观。也就是说,当它是您的显示器中唯一的东西时,当您更改样式时充其量不会很明显(就像我的问题中的 Hello World 示例一样)。

正如预期的那样,当我将示例中的简单 QLabel 替换为组合框或其他更复杂的小部件时,样式差异非常明显,正如小部件库中所述。

请注意,当我在 Qt Centre 询问此问题时,指出了上面的小部件库

【讨论】:

  • 唯一真正有用的答案。
猜你喜欢
  • 2012-07-11
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多