2016-07-27 576 views
0

我的問題如下: 我正在使用PyQt5,我想使用外部樣式表,這意味着我在.qrc文件中引用了.qss文件,並且我想在我的代碼中應用這個。如何從資源添加.qss文件

現在我的問題是我將如何加載這個文件和什麼格式這需要。例如,

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

導致FileNotFound錯誤。雖然根據資源文件,它應該在那裏。

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

沒有問題找到引用的文件,但產生QByteArrayAPP.setStyleSheet(sty_f.readAll())不能使用。只要將其轉換爲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()) 
+0

正如說沒有解碼我只是得到一個「無法解析應用程序樣式表」 - 錯誤。我的樣式表只包含#ALL_ASCII_NAME {color:red}。這應該是所有ascii。無論如何,真的需要一個樣式表,但是我真的很想知道它是如何工作的。 – haxor789

+0

@ haxor789。對不起,我可以發誓,這就是爲什麼我錯過了你的問題的一部分。無論如何,我已經用不同的解決方案解決了我的問題,這應該可以正常工作。 – ekhumoro