Domanda

Sto provando a utilizzare un'immagine JPEG in un oggetto QImage da uno script Python, con PyQt4.

Lo script stesso funziona perfettamente, l'immagine viene caricata e può essere manipolata, renderizzata e tutto.Tuttavia, quando provo a "compilare" questo script con py2exe, tutto funziona tranne l'immagine JPEG.Sostituirlo con un equivalente PNG funziona, ma poiché il mio programma scarica immagini dal Web, non saranno sempre in formato PNG e non posso permettermi di convertirle tutte con un'altra libreria.

Ho scoperto che il supporto delle immagini JPEG per QImage, insieme ad altri formati di immagine, è fornito da alcune DLL nella directory \qt\plugins\imageformats (si chiamano qjpeg4.dll e qjpeg4d.dll).Penso di doverli usare in qualche modo nel mio eseguibile, ma non so come.Ho provato semplicemente a copiarli nella mia directory exe, senza fortuna.Ho provato, come qui indicato, per includere quei file come data_files nello script setup.py, ma senza fortuna (sembra che tutto ciò che fa sia copiare questi file nella directory dell'exe, quindi non cambia nulla dal copiarli comunque manualmente).

Sono sicuro che ci siano una manciata di applicazioni là fuori che utilizzano PyQt con immagini JPEG, come fanno?Sembrava un compito banale ma ora sono bloccato.

Inoltre, voglio che la mia app sia multipiattaforma (perché altrimenti dovrei scrivere codice in Python?), Spero di non incorrere in tali problemi di confezionamento (non è l'unico) durante il confezionamento per OS X o Linux.Lo farò?

È stato utile?

Soluzione

Dopo ore di inciampare in giro con lo stesso problema, mi piacerebbe condividere la soluzione che ha funzionato per me su Windows Vista: utilizzando python2.6

copiare la directory seguente nella directory dist generato da py2exe:

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

Ho appena lasciato cadere la directory imageformats direttamente nella mia directory dist, senza ulteriori modifiche per qt.conf o qualcosa di simile. Non ho provato, ma questo può funzionare per fononi pure.

Altri suggerimenti

dovrò confessare sono mai riuscito a ottenere la combinazione py2exe + PyQt perfettamente ragione (e, py2exe non aiuta affatto con l'imballaggio cross-platform). PyInstaller sembra essere molto meglio - la documentazione a http://www.pyinstaller.org/ sono vecchi , ma il tronco svn è molto più recente. Alcuni documenti sono in diapositive formulato nella recente conferenza PyCon Italia Tre - http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf - e, le diapositive sono in inglese, e contengono la corrente E-mail del manutentore, in modo che dovrebbe aiutare! (E, andiamo tutti atrio l'attuale responsabile per aggiornare la documentazione ... -!)

Etienne: grazie per il suggerimento.Dopo molte letture e tentativi ed errori, sono arrivato alla stessa conclusione:usa PIL per mostrare jpeg in un'app generata da py2app.

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

Quello che immagino è che le soluzioni proposte per py2exe/Windows non si applicano necessariamente a py2app/OSX.

Sono su OSX Leopard. Supponiamo di avere un MyApp.app applicazione.

  • Mettere il libqjpeg.dylib librerie e libqgif.dylib in
    MyApp.app/Contents/plugins/imageformats/
  • Mettere questo in qt.conf in MyApp.app/Contents/resources/:

    [Paths]
    Prefix = .
    Binaries = .
    

Sulla mia macchina (Leopard) funziona.

Dopo aver provato tutte le soluzioni di cui sopra invano, ho appena finito per usare PIL per caricare le mie immagini. Dal momento che ho voluto per convertire queste immagini ad una texture in un widget OpenGL Qt, il risultato è stato lo stesso se io carico l'immagine utilizzando Qt o PIL. Ancora, sto sconcertato che una cosa così semplice come JPEG di carico è così complicato in una libreria GUI come ben noto ed ampiamente utilizzato come Qt.

ho avuto lo stesso identico problema. Risolto utilizzando questo: http://mail.python.org /pipermail/python-list/2008-June/669374.html

  1. plugin Copia Qt alla directory: $ YOUR_DIST_PATH / PyQt4 / plugins;
  2. Copia qt.conf alla directory dist;
  3. Modifica qt.conf, cambiare prefisso a ./PyQt4

Per quanto mi riguarda, il problema è stato risolto semplicemente copiando il "qt.conf" per la directory del file eseguibile.

È possibile trovare il "qt.conf" in ... \ PythonXX \ lib \ site-packages \ PyQt4 \ qt.conf.

Grazie per l'aiuto.

Tutto sopra non riuscito per me fino a quando mi sono reso conto che ero bundling l'exe (che è, ho avuto la possibilità "bundle_files":. 2 nel mio setup.py ho cambiato in bundle_files = 2, e ora funziona benissimo.

Le soluzioni di cui sopra vanno bene. In particolare, ho solo aggiunto la seguente riga nel mio setup.py: data = [( "imageformats", glob.glob ( "C: \ Python26 \ Lib \ site-packages \ PyQt4 \ plugins \ imageformats * .dll"))]

(oltre ad altri file, ovviamente).

Poi, le DLL di caricamento delle immagini sono in MY_EXE_DIR / imageformats

Non ho bisogno di un qt.conf per fare questo lavoro, anche se sono sicuro che si potrebbe usare se si desidera mantenere il vostro albero di directory meno ingombrante.

E 'possibile utilizzare il plugin JPEG con uno script py2exe'd, anche utilizzando bundle_files. È necessario organizzare due cose per ottenere questo per funzionare correttamente:

  1. Copia PyQt4 / plugins / imageformats nella directory di output di py2exe (default: dist)

    È sufficiente copiare i formati hai veramente bisogno.

  2. Quando utilizzare l'opzione bundle_files è necessario execlude i file DLL Qt dalla zipfile utilizzando l'opzione --dll-excludes per pyexe.

    Hai ancora a copiare le DLL Qt nella directory di output qualche altro modo (ad esempio, utilizzando l'opzione data_files).

In Windows, ha suggerito soluzioni funzionano perfettamente.

Tuttavia, su OSX non può farlo funzionare anche con le istruzioni qui sopra.

domanda è: i file libqjpeg.dylib e libqgif.dylib si trovano nella directory /Developer/Applications/Qt/plugins/imageformats/, e che se si è installato Qt per sé, non solo PyQt. questi file non funzionano per me.

nella distribuzione PyQt, vedo il libqjpeg.bundle file e libqgif.bundle in /opt/local/libexec/qt4-mac/plugins/imageformats/, tuttavia queste non sono le biblioteche, e btw non riesco ad aprire il loro contenuto sia, anche se hanno l'estensione .bundle. Utilizzando questi file invece non funziona neanche.

Sono curioso di sapere che cosa hai fatto per farlo funzionare su OSX. ho installato PyQt seguente questa guida .

Grazie per le vostre risposte utile per la domanda! Ho incontrato lo stesso problema che avete fatto e nessuna soluzione potrebbe aiutare. Speriamo, io ero con VCS e ha scoperto che la vecchia versione della mia applicazione caricata correttamente le immagini JPEG e le nuove versioni smesso di farlo. Ho preso questo bug utilizzando PySide v1.2.2 .

Per consentire alle biblioteche di carico, ho usato la stessa soluzione come fece @Macke (cioè aggiunti e modificati qt.conf).

Il mio qt.conf era accanto:

[Paths]
Binaries = .
Plugins = qtplugins

C:\Python27\Lib\site-packages\PySide\plugins directory è stato copiato qtplugins directory, così ho dovuto prossimi directory:

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

Ho avuto codice successivo:

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

Moving classe NotesCalendar.note_icon variabile al costruttore risolto il problema e Qt ha iniziato il caricamento in modo corretto le sue librerie. Sembra che il costruttore variabile di classe interrotto alcune cose PySide interno.

Si funziona senza problemi su Windows. Specifica corretta directory qt.conf e la copia plugins è sufficiente per abilitare il supporto JPEG in py2exe + PySide build. Naturalmente, è necessario avere alcun problema nel proprio codice.

Spero che questo vi farà risparmiare qualcuno un giorno! ;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top