我的问题如下: 我正在使用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}}
但问题仍然是有一个更好的方法,因为转换这个烂摊子并不是最佳解决方案。
答案 0 :(得分:1)
有些Qt API支持直接读取资源,但您必须自己阅读。这也需要使用Qt IO类,因为这些是唯一可以理解资源路径的东西。
对于读取qss文件的特定情况,您可以忽略编码,因为该文件应仅包含ascii。所以这看起来很简单,因为你可以得到:
stream = QtCore.QFile(resource_path)
stream.open(QtCore.QIODevice.ReadOnly)
widget.setStyleSheet(QtCore.QTextStream(stream).readAll())