如何从资源中添加 .qss 文件
Posted
技术标签:
【中文标题】如何从资源中添加 .qss 文件【英文标题】:How to add a .qss file from resource 【发布时间】:2016-07-27 10:02:21 【问题描述】:我的问题如下: 我正在使用 PyQt5,我想使用一个外部样式表,这意味着我有一个在我的 .qrc 文件中引用的 .qss,我想在我的代码中应用它。
现在我的问题是我将如何加载这个文件以及它需要什么格式。例如
sty_f = open(":/Style/style.qss","r")
导致 FileNotFound 错误。虽然根据资源文件它应该在那里。
sty_f = QtCore.QFile(":/Style/style.qss")
sty_f.open(QtCore.QIODevice.ReadOnly)
另一方面,找到引用的文件没有问题,但会生成APP.setStyleSheet(sty_f.readAll())
无法使用的QByteArray
。只需将其转换为 str APP.setStyleSheet(str(sty_f.readAll()))
就会导致 Could not parse application stylesheet
错误。
最后但同样重要的是:
sty_f = open("PATH/style.qss","r")
APP.setStyleSheet(sty_f.read())
有效。现在有没有办法让它也使用资源文件工作?哪些部分可能存在缺陷,因为它们都可以工作但不能同时工作?
更新:同样有效的是:
sty_f = QtCore.QFile(":/Style/style.qss")
sty_f.open(QtCore.QIODevice.ReadOnly)
APP.setStyleSheet(((sty_f.readAll()).data()).decode("latin1"))
但问题仍然是是否有更好的方法可以做到这一点,因为转换这种混乱并不是最佳解决方案。
【问题讨论】:
【参考方案1】:一些 Qt API 支持直接读取资源,否则您必须自己读取它们。这也需要使用 Qt IO 类,因为它们是唯一可以理解资源路径的东西。
对于读取 qss 文件的特定情况,您可以忽略编码,因为文件应该只包含 ascii。所以这似乎很简单:
stream = QtCore.QFile(resource_path)
stream.open(QtCore.QIODevice.ReadOnly)
widget.setStyleSheet(QtCore.QTextStream(stream).readAll())
【讨论】:
如前所述,如果没有解码,我只会得到“无法解析应用程序样式表”-错误。我的样式表只包含#ALL_ASCII_NAME color:red。应该都是ascii。也许真的需要一个样式表还不够花哨,但我真的很想知道它是如何工作的。 @haxor789。抱歉,我本可以发誓这有效,这就是为什么我错过了你问题的那一部分。无论如何,我已经用不同的解决方案更新了我的答案,它应该可以正常工作。以上是关于如何从资源中添加 .qss 文件的主要内容,如果未能解决你的问题,请参考以下文章