Hallo,
ich arbeite zurzeit an einem GUI-Python programm welches mit PYQT4 gemacht wurde. Jetzt habe ich in diesem Programm ein paar Bildern eingefügt und nun auch schon ein .exe draus gemacht. Nun ist mein Problem das es mich sehr nervt das die ganzen Bildern da frei rumliegen und jeder auf sie zugreifen/bearbeiten kann. Kann mir jmd. erklären wie ich all diese Bildern in eine Resource (z.B. eine .dll Datei) packen kann und dann in meinen Programm auf sie zugreifen kann?
Würde mich sehr um eine nützliche Antwort freuen.
LG
microkernel
PYQT4: Bilder zu Resourcen hinzufügen
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
Warum ist das ein Problem? Gehörst du der "Anti-OpenSource-Initiative" an?microkernel hat geschrieben:Nun ist mein Problem das es mich sehr nervt das die ganzen Bildern da frei rumliegen und jeder auf sie zugreifen/bearbeiten kann.
@derdon
Dieser Kommentar war ein bisschen überflüssig ... einfacheres Deployment wäre beispielsweise ein Grund, Bilder in die Exe-Datei zu integrieren.
PyQt4 bietet eine Resourcenverwaltung. Man kann im Designer oder per Hand Resourcen-Beschreibungen erstellen, und diese dann mittels "pyrcc4" in Python-Module oder mittels "rcc" in Binärdateien umwandeln, die man dann dynamisch nachladen kann. Mehr darüber steht in der Dokumentation von Qt4 und PyQt4.
Dieser Kommentar war ein bisschen überflüssig ... einfacheres Deployment wäre beispielsweise ein Grund, Bilder in die Exe-Datei zu integrieren.
PyQt4 bietet eine Resourcenverwaltung. Man kann im Designer oder per Hand Resourcen-Beschreibungen erstellen, und diese dann mittels "pyrcc4" in Python-Module oder mittels "rcc" in Binärdateien umwandeln, die man dann dynamisch nachladen kann. Mehr darüber steht in der Dokumentation von Qt4 und PyQt4.
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
Vielen Dank "lunar"!
Ihr beitrag hat mir auf jeden fall weitergeholfen.
Ihr beitrag hat mir auf jeden fall weitergeholfen.
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
Entschuldigung wenn es jetzt vielleicht ein bisschen lästig rüberkommt aber ich habe mir gerade die PyQt4 Docu durchgelesen und verstehe es immer noch nicht wie ich das machen soll.
Ich habe jetzt verstanden wie ich meine ganzen Bilder zu dieser Resource hinzufüge und wie ich sie dann abspeicher.
Aber was soll ich dann mit dieser ".qrc" Datei machen, wenn ich sie so haben will, das ich von meinen Hauptprogramm direkt auf diese Bildern zugreifen kann?
LG
microkernel
Ich habe jetzt verstanden wie ich meine ganzen Bilder zu dieser Resource hinzufüge und wie ich sie dann abspeicher.
Aber was soll ich dann mit dieser ".qrc" Datei machen, wenn ich sie so haben will, das ich von meinen Hauptprogramm direkt auf diese Bildern zugreifen kann?
LG
microkernel
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Wenn du den Designer verwendest, musst du nur ``pyrcc4`` auf deine `.qrc` Datei ausführen (Wenn du sie auch richtig als Ressource angegeben hast)
Verwendest du ihn nicht, musst du die erstellte Datei in jedem Skript importieren, in dem du die Bilder verfügbar haben willst. Die Notation (:/*pfad*) kümmert sich um den Rest.
Verwendest du ihn nicht, musst du die erstellte Datei in jedem Skript importieren, in dem du die Bilder verfügbar haben willst. Die Notation (:/*pfad*) kümmert sich um den Rest.
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Das ist aber nicht der Grund welcher genannte. Wobei da das Einbetten dagegen nicht viel bringt, reshacker lässt grüssen.lunar hat geschrieben:@derdon
Dieser Kommentar war ein bisschen überflüssig ... einfacheres Deployment wäre beispielsweise ein Grund, Bilder in die Exe-Datei zu integrieren.
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
jetzt hab' ich eine aus dieser .qrc datei eine .py Datei gemacht. Aber WIE kann ich jetzt von meinen Programm aus auf die Bildern, welche jetzt in dieser Python Resourcen Datei sind, zugreifen???
LG
microkernel
LG
microkernel
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
Ich habe jetztdas Problem gelöst:
Wenn man jetzt die ".qrc" Datei in eine Python Datei, mittels "pyrc4 -o" konvertiert hat, muss man nurnoch im hauptprogramm die Python Datei importieren: und schon kann man im Programm mit folgendem Befehl die Bilder einfügen:.
LG
microkernel
Wenn man jetzt die ".qrc" Datei in eine Python Datei, mittels "pyrc4 -o" konvertiert hat, muss man nurnoch im hauptprogramm die Python Datei importieren:
Code: Alles auswählen
import name der datei
Code: Alles auswählen
QtGui.QIcon(":/präfix/bild.ico")
LG
microkernel
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich muss diesen Thread noch mal wiederbeleben, da ich zu blöde bin, das ganze anzuwenden.
Ich habe mit dem Designer ein .ui-File erzeugt und lade das dynamisch in meiner Applikation mittels uic.loadUi(pfad, self).
Zusätzlich habe ich eine Resourcen-Datei erstellt (ebenfalls mit dem Designer), in der sich zwei Icons befinden. Diese Icons kommen jeweils auf einen QPushButton und auch dort habe ich mich im Designer auf die Resource-Datei bezogen.
In der Vorschau sehe ich die Icons auch auf den Buttons - starte ich mein Python-Script jedoch, sehe ich nichts.
Wie muss ich hier vorgehen?
Ich habe auch mittels pyrcc4 ein Modul erstellt und importiere dieses in meinem Python-Script - ohne Erfolg. Die Resourcendatei liegt im selben Verzeichnis wie das .ui-File, die Icons unterhalb dieses Ordners in einem "icon"-Verzeichnis. Die Python-Applikation liegt ein Verzeichnis darüber.
Ich habe also folgende Struktur:
Muss die mittels pyrcc4 kompilierte "icons.py" einen speziellen Namen haben? Inwiefern ist der Prefix wichtig (ich habe ihn "res" genannt).
Sorry, aber aus der Doku von Riverbank (und hier auch der offiziellen Qt-Doku) werde ich nicht schlau.
Ich habe mit dem Designer ein .ui-File erzeugt und lade das dynamisch in meiner Applikation mittels uic.loadUi(pfad, self).
Zusätzlich habe ich eine Resourcen-Datei erstellt (ebenfalls mit dem Designer), in der sich zwei Icons befinden. Diese Icons kommen jeweils auf einen QPushButton und auch dort habe ich mich im Designer auf die Resource-Datei bezogen.
In der Vorschau sehe ich die Icons auch auf den Buttons - starte ich mein Python-Script jedoch, sehe ich nichts.
Wie muss ich hier vorgehen?
Ich habe auch mittels pyrcc4 ein Modul erstellt und importiere dieses in meinem Python-Script - ohne Erfolg. Die Resourcendatei liegt im selben Verzeichnis wie das .ui-File, die Icons unterhalb dieses Ordners in einem "icon"-Verzeichnis. Die Python-Applikation liegt ein Verzeichnis darüber.
Ich habe also folgende Struktur:
Code: Alles auswählen
/
script.py
icons.py
gui/
my_widget.ui
icons.qrc
icons/
close.png
calculate.png
Sorry, aber aus der Doku von Riverbank (und hier auch der offiziellen Qt-Doku) werde ich nicht schlau.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Importierst Du das Resourcen-Modul auch garantiert, bevor Du die UI-Dateien lädst? Alternativ kannst Du übrigens auch "rcc -binary" verwenden, um eine binäre Resourcendatei zu erzeugen. Die kannst Du dann zur Laufzeit über "QResource.registerResource" laden.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
*narf* Danke für den Hinweis! Ich habe den import in ein anderes Script geschrieben... (manchmal ist man so richtig fertig... Zeit zum Einkaufen und an die frische Luft gehen!)lunar hat geschrieben:Importierst Du das Resourcen-Modul auch garantiert, bevor Du die UI-Dateien lädst?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert