如何从资源添加.qss文件

时间:2016-07-27 10:02:22

标签: pyqt5 qtstylesheets

我的问题如下: 我正在使用PyQt5,我想使用外部样式表,这意味着我的.qrc文件中引用了一个.qss,我希望在我的代码中应用它。

现在我的问题是我将如何加载此文件以及这需要什么格式。例如

sty_f = open(":/Style/style.qss","r")

导致FileNotFound错误。虽然根据资源文件它应该在那里。

sty_f = QtCore.QFile(":/Style/style.qss")
sty_f.open(QtCore.QIODevice.ReadOnly)
另一方面,

找到引用的文件没有问题,但会产生QByteArray APP.setStyleSheet(sty_f.readAll())无法使用的APP.setStyleSheet(str(sty_f.readAll()))。只需将其转换为str 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}}

但问题仍然是有一个更好的方法,因为转换这个烂摊子并不是最佳解决方案。

1 个答案:

答案 0 :(得分:1)

有些Qt API支持直接读取资源,但您必须自己阅读。这也需要使用Qt IO类,因为这些是唯一可以理解资源路径的东西。

对于读取qss文件的特定情况,您可以忽略编码,因为该文件应仅包含ascii。所以这看起来很简单,因为你可以得到:

stream = QtCore.QFile(resource_path)
stream.open(QtCore.QIODevice.ReadOnly)
widget.setStyleSheet(QtCore.QTextStream(stream).readAll())