2016-07-27 15 views
0

mein Problem ist das folgende: Ich arbeite mit PyQt5 und ich möchte ein externes Stylesheet verwenden, was bedeutet, dass ich eine .qss habe, die in meiner .qrc-Datei referenziert wird Ich möchte dies in meinem Code anwenden.Wie man eine .qss Datei von Ressource

Jetzt ist meine Frage, wie soll ich diese Datei laden und welches Format benötigt dies. Zum Beispiel

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

führt zu einem FileNotFound-Fehler. Obwohl laut der Ressourcendatei sollte es da sein.

sty_f = QtCore.QFile(":/Style/style.qss") 
sty_f.open(QtCore.QIODevice.ReadOnly) 

auf der anderen Seite hat kein Problem, die referenzierte Datei zu finden, sondern erzeugt eine QByteArray dass APP.setStyleSheet(sty_f.readAll()) nicht verwenden kann. Wenn Sie es einfach in eine Str APP.setStyleSheet(str(sty_f.readAll())) konvertieren, wird ein Could not parse application stylesheet Fehler ausgegeben.

Und last but not least:

sty_f = open("PATH/style.qss","r") 
APP.setStyleSheet(sty_f.read()) 

funktioniert. Jetzt gibt es eine Möglichkeit, es auch mit der Ressourcendatei arbeiten zu lassen? Und welcher Teil könnte fehlerhaft sein, da alle funktionieren, aber nicht gleichzeitig?

Update: Was auch funktioniert, ist:

sty_f = QtCore.QFile(":/Style/style.qss") 
sty_f.open(QtCore.QIODevice.ReadOnly) 
APP.setStyleSheet(((sty_f.readAll()).data()).decode("latin1")) 

aber immer noch die Frage, gibt es eine bessere Art und Weise, um die Umwandlung dieses Chaos zu tun, fühlt sich nicht die optimale Lösung zu sein.

Antwort

1

Einige Qt-APIs unterstützen das Lesen von Ressourcen direkt, aber ansonsten müssen Sie sie selbst lesen. Dies beinhaltet auch die Verwendung der Qt-IO-Klassen, da dies die einzigen Dinge sind, die Ressourcenpfade verstehen können.

Für den speziellen Fall des Lesens einer qss-Datei können Sie die Codierung ignorieren, da die Datei nur ascii enthalten sollte. Das scheint also so einfach wie möglich zu sein:

+0

Wie gesagt, ohne die Decodierung bekomme ich nur ein "konnte nicht Anwendung Stylesheet analysieren" -Error. Und mein Stylesheet besteht nur aus # ALL_ASCII_NAME {color: red}. Was alles Ascii sein sollte. Vielleicht ist es sowieso nicht schick genug, um wirklich ein Stylesheet zu brauchen, aber ich würde gerne wissen, wie es funktionieren würde. – haxor789

+0

@ haxor789. Tut mir leid, ich hätte schwören können, dass das funktioniert hat, weshalb ich diesen Teil Ihrer Frage verpasst habe. Wie auch immer, ich habe meine Antwort mit einer anderen Lösung aktualisiert, die richtig funktionieren sollte. – ekhumoro