Frage

Ich versuche, ein JPEG-Bild in einem QImage Objekt aus einem Python-Skript zu verwenden, mit PyQt4.

Das Skript selbst funktioniert perfekt, die Bild Lasten und können manipuliert und wiedergegeben und alle werden. Allerdings, wenn ich versuche, „kompiliert“ dieses Skript mit py2exe, funktioniert alles, aber das JPEG-Bild. Ersetzen Sie es mit einem PNG äquivalent funktioniert, aber da meine Programm-Downloads Bilder aus dem Internet, werden sie nicht immer im PNG-Format sein, und ich kann nicht leisten, sie alle mit einer anderen Bibliothek zu konvertieren.

Ich habe entdeckt, dass JPEG-Bildunterstützung für QImage, zusammen mit anderen Bildformaten, die von einigen DLLs im Verzeichnis \ qt \ Plugins \ imageformats Verzeichnis zur Verfügung gestellt wird (sie sind qjpeg4.dll und qjpeg4d.dll genannt). Ich glaube, ich brauche sie in meiner ausführbaren Datei irgendwie verwenden, aber ich weiß nicht, wie. Ich habe einfach versucht, sie in meinem exe-Verzeichnis zu kopieren, ohne Glück. Ich habe versucht, wie hier angegeben, enthalten diese Dateien als data_files im setup.py-Skript, aber kein Glück (es wie alle sieht es tut, ist diese Dateien in das Verzeichnis der exe kopieren, so ändert es nichts von ihnen ohnehin manuell zu kopieren).

Ich bin sicher, dass eine Handvoll Anwendungen gibt es da draußen mit PyQt mit JPEG-Bildern, wie tun sie es? Es schien wie eine triviale Aufgabe, aber ich bin auf sie jetzt stecken.

Auch möchte ich meine App Cross-Plattform sein (warum sonst würde ich in Python Codierung werden?), Ich hoffe, ich werde nicht in eine solche Verpackung Probleme laufen (es ist nicht der einzige), wenn für OS X Verpackung oder Linux. Will ich?

War es hilfreich?

Lösung

Nach Stunden des Anstoßes um mit dem gleichen Problem, würde Ich mag die Lösung teilen, das für mich auf Windows Vista gearbeitet: mit python2.6

Kopieren Sie das folgende Verzeichnis in Ihr dist Verzeichnis von py2exe generiert:

C:\Python26\Lib\site-packages\PyQt4\plugins\imageformats

Ich ließ nur das imageformats Verzeichnis direkt in mein dist-Verzeichnis, ohne weitere Modifikationen wie das qt.conf oder sonst etwas. Ich habe es nicht ausprobiert, aber dies auch für Phonon arbeiten kann.

Andere Tipps

Ich werde gestehen, habe ich nie die py2exe + pyqt Kombination ganz richtig zu machen verwaltet (und py2exe hilft nicht bei allen mit Cross-Plattform-Verpackung). PyInstaller scheint viel besser zu sein - die Dokumentation unter http://www.pyinstaller.org/ sind alt , aber der sVN-Stamm ist viel jünger. Einige Dokumente sind in Folien auf der jüngsten PyCon Italia Tre Konferenz gegeben - http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf - und sind die Folien in Englisch, und enthalten den aktuellen Betreuers E-Mail, so dass sie helfen sollen! (Und, lassen Sie uns alle aktuellen Maintainer Lobby die Dokumentation zu aktualisieren ... -)

Versuchen

Hinzufügen einer qt.conf Datei auf Ihre exe-Verzeichnis zu sagen qt wo Binärdateien und Plugins zu finden.

So etwas wie die folgenden Arbeiten für den einfachen Fall, wo man nur alle DLL in dem gleichen Verzeichnis wie die exe-Dump:

[Paths]
Prefix = .
Plugins = .

Update: Dann kopieren Sie Ihre Plugins-Inhalte (die Imageformat / sqldriver Verzeichnisse usw.) an die exe Richt. Ich glaube nicht, Sie Plugin-DLLs aus dem gleichen Verzeichnis wie die exe laden können. Siehe Qt Plugin doc Details zu plugon Verzeichnissen. (Oder, lassen Sie den 'Plug-ins =.' Und kopieren Sie die Plugins dir auf die exe dir, so haben Sie /plugins/imageloaders/qjpeg4.dll).

Etienne - Vielen Dank für den Tipp. Nach vielen Lese und Trial-and-error, kam ich zu dem gleichen Ergebnis. PIL verwendet JPEG-Dateien in einem py2app generierten App zeigen

http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what- To-do-with-you-when-youre-like-this /

Was ich denke, ist, dass die vorgeschlagenen Lösungen für py2exe / Windows-nicht unbedingt auf py2app / OSX gelten.

Ich bin auf OSX Leopard. Nehmen wir an, Sie eine Anwendung MyApp.app haben.

  • Legen Sie die Bibliotheken libqjpeg.dylib und libqgif.dylib in
    MyApp.app/Contents/plugins/imageformats/
  • Setzen Sie diese in qt.conf in MyApp.app/Contents/resources/:

    [Paths]
    Prefix = .
    Binaries = .
    

Auf meinem Rechner (Leopard) das funktioniert.

all oben genannte Lösungen vergeblich Nach dem Versuch, ich gerade zu Ende gegangen PIL mit bis zu meinen Bilder zu laden. Da ich diese Bilder auf eine Textur in OpenGL Qt-Widget umwandeln wollte, war das Ergebnis das gleiche, ob ich das Bild geladen mit Qt oder PIL. Trotzdem bin ich verblüfft, dass eine solche einfache Sache, wie Laden JPEGs in einer GUI-Bibliothek so kompliziert ist, wie gut bekannt und weit verbreitet als Qt verwendet.

Ich hatte genau das gleiche Problem. Fest es dies mit: http://mail.python.org /pipermail/python-list/2008-June/669374.html

  1. Kopieren Qt Plugins in das Verzeichnis: $ YOUR_DIST_PATH / PyQt4 / plugins;
  2. Kopieren qt.conf zu Ihrem dist Verzeichnis;
  3. Bearbeiten qt.conf, ändern Präfix ./PyQt4

Für mich war das Problem gelöst nur das Kopieren der „qt.conf“ für das Verzeichnis der ausführbaren Datei.

Sie können die "qt.conf" in ... \ PythonXX \ Lib \ site-packages \ PyQt4 \ qt.conf.

Vielen Dank für die Hilfe.

Alles oben für mich im Stich gelassen, bis ich erkannte, dass ich war Bündelung die EXE (das heißt, ich hatte die Option „bundle_files“:. 2 in meinem setup.py habe ich es zu bundle_files = 2, und jetzt ist es funktioniert super.

Die oben genannten Lösungen sind in Ordnung. Genauer gesagt, habe ich nur noch die folgende Zeile in meinem setup.py: data = [( "imageformats", glob.glob ( "C: \ Python26 \ Lib \ site-packages \ PyQt4 \ Plugins \ * imageformats DLL"))]

(zusätzlich zu anderen Dateien, natürlich).

Dann werden die Bildlade dlls sind in MY_EXE_DIR / imageformats

Ich habe keine qt.conf brauchen, um diese Arbeit zu machen, obwohl ich sicher bin, Sie es verwenden können, wenn Sie Ihren Verzeichnisbaum halten wollen weniger überladen.

Es ist möglich, die JPEG-Plugin mit einem py2exe'd Skript zu verwenden, auch mit bundle_files. Sie müssen zwei Dinge anordnen dies richtig zu arbeiten:

  1. Kopieren PyQt4 / plugins / imageformats in das Ausgabeverzeichnis von py2exe (Standard: dist)

    Sie müssen nur die Formate kopieren Sie tatsächlich benötigen.

  2. Wenn die bundle_files Option verwenden müssen Sie die Qt DLL-Dateien von der execlude zipfile mit der --dll-excludes Option für pyexe.

    Sie haben immer noch den Qt-DLLs in das Ausgabeverzeichnis auf eine andere Weise zu kopieren (wie durch die data_files Option).

auf Fenster, vorgeschlagenen Lösungen perfekt funktionieren.

jedoch auf osx kann es nicht einmal mit Anweisungen funktioniert hier oben.

Frage: die libqjpeg.dylib und libqgif.dylib Dateien werden im /Developer/Applications/Qt/plugins/imageformats/ Verzeichnis befindet, und dass, wenn Sie haben Qt selbst, nicht nur PyQt installiert. diese Dateien für mich nicht funktionieren.

in PyQt Verteilung, ich sehe die Dateien libqjpeg.bundle und libqgif.bundle in /opt/local/libexec/qt4-mac/plugins/imageformats/, aber diese sind nicht Bibliotheken und btw kann ich nicht ihren Inhalt entweder öffnen, auch wenn sie die .bundle Erweiterung haben. Mit diesen Dateien stattdessen funktioniert auch nicht.

Ich bin neugierig zu wissen, was Sie es auf osx machen getan haben, zu arbeiten. Ich habe PyQt folgende dieses Handbuch .

Vielen Dank für Ihre hilfreichen Antworten auf die Frage! Ich habe gleiches Problem gestoßen, wie Sie getan haben und keine Lösungen helfen könnten. Hoffentlich war ich VCS und festgestellt, dass alte Version meiner App JPEG-Bilder korrekt geladen und neue Versionen gestoppt, es zu tun. Ich fing diesen Fehler mit pyside v1.2.2 .

Damit Bibliotheken laden, ich die gleiche Lösung verwendet, wie @Macke tat (d hinzugefügt und bearbeitet qt.conf).

Meine qt.conf wurde als nächstes:

[Paths]
Binaries = .
Plugins = qtplugins

C:\Python27\Lib\site-packages\PySide\plugins directory kopiert wurde Verzeichnis qtplugins, also musste ich nächste Verzeichnisse:

qtplugins\accessible
qtplugins\codecs
qtplugins\graphicssystems
qtplugins\iconengines
qtplugins\imageformats

Ich hatte nächsten Code:

class NotesCalendar(QtGui.QCalendarWidget):
    note_icon = QtGui.QImage("res/16note.png")

Variable NotesCalendar.note_icon zu Konstruktor Verschieben Klasse löste das Problem und Qt korrekt gestartet seine Bibliotheken geladen werden. Es scheint, dass Klassenvariable Konstruktor einige interne pyside Sachen unterbrochen.

Es funktioniert ohne Probleme unter Windows. korrekt qt.conf und Kopieren plugins Verzeichnis angeben genug ist, um JPEG-Unterstützung in py2exe zu aktivieren + pyside zu bauen. Natürlich müssen Sie keine Probleme in Ihrem eigenen Code haben.

Ich hoffe, das jemand am Tag zu retten! ;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top