2012-05-07 20 views
5

Sto cercando di ottenere QImage (o qualsiasi cosa in PyQt4, se è per questo) per caricare un file jpg in uno script. Non sono stato in grado di trovare alcuna informazione su come caricarlo per caricare un'immagine jpg come script, un sacco da compilare usando py2exe ma non riesco nemmeno ad arrivare a tanto.PyQt4 jpeg/jpg formato immagine non supportato

Trascorrere un po 'di tempo per risolvere questo, ho seguito un paio di cose con senza alcun risultato ... Guardando nei miei site-packages/PyQt4/plugins/imageformats cartella che ho:

qgif4.dll, qico4 .dll, qjpeg4.dll, qmng4.dll, qsvg4.dll, qtga4.dll, qtiff4.dll

Secondo QtGui.QImageReader.supportedImageFormats(), questo è ciò che la mia installazione di PyQt4 possono utilizzare

[ PyQt4.QtCore.QByteArray ('bmp'), PyQt4.QtCore.QByteArray ('pbm'), PyQt4.QtCore.QByteArray ('pgm'), PyQt4.QtCore.QByteArray ('png'), PyQt4.QtCore.QByteArray ('p pm '), PyQt4.QtCore.QByteArray (' xbm '), PyQt4.QtCore.QByteArray (' xpm ')]

Ho anche fatto in modo che il mio file qt.conf si trovi nella directory python principale e ha questo

[Paths]

Prefix = C:/Python27/Lib/site-packages/PyQt4 
Binaries = C:/Python27/Lib/site-packages/PyQt4 

ho provato ad aggiungere

Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins/imageformats 
Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins 

senza fortuna

sono running python 2.7.2, con PyQt4 4.9.1 (entrambi 32b), su Windows 7 64b Home Premium.

Ho anche provato la versione 4.8.1 e 4.8.5 (che avevo a disposizione) ma nessuno di questi supportava jpg. Sono in perdita. Come posso riportarli a essere supportati?

+0

Strano. Per me questa era stata una preoccupazione una volta su OSX quando si trattava di impacchettare py2app, ma mai in una situazione di script. È sempre riuscito a trovare il plugin correttamente. – jdi

+0

Wow, non è solo 'JPEG' Sembra che PyQt non possa caricare nessuno di quei file' dll'. Puoi provare 'Plugin = plugins'? Non dovrebbe essere percorso completo. – Avaris

+0

Ho dato una prova ai plugin, quindi ho provato '/ plugins', '/ plugins/imageformats', 'plugins/imageformats' per buona misura. Niente. – ooklah

risposta

6

Ci sono due problemi diversi che sembra che possano contribuire a causare questo. E sembra che mi sia imbattuto in entrambi.

1 °. Ho dato esecuzione all'installer PyQt4 'come amministratore' che sembra aver risolto parte del problema. Quindi deve essere eseguito come amministratore per far funzionare tutto correttamente.

2 °. Affinché tutti i plug-in vengano caricati correttamente, è necessario eseguire QApplication prima di caricare qualsiasi tipo di immagine.

così

app = QtGui.QApplication(sys.argv) 

deve essere creato prima.

miei script vengono eseguiti come

def main(): 
    app = QtGui.QApplication(sys.argv) 
    win = window() 
    win.display() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

che non è cambiata da quando ho installato PyQt4 come amministratore, ma ora funziona e carica i file JPEG e tutto il resto.

Quello che stavo cercando di fare, era creare uno script che sarebbe stato chiamato da un'applicazione PyQt4 ma non sarebbe stato eseguito da solo, quindi non c'era bisogno di creare prima un QApplcation.Quale è dove mi sono imbattuto in questione # 2

Per riferimento: http://article.gmane.org/gmane.comp.python.pyqt-pykde/7176/match=jpeg+plugin+not+loading

Installare come amministratore e sempre creare la QApplication, anche se non ne hai bisogno.

anche se sono solo il controllo per vedere ciò che è disponibile in idle:

from PyQt4 import QtGui 
QtGui.QImageReader.supportedImageFormats() 

non mostrerà tutto, hanno ancora bisogno di eseguire

from PyQt4 import QtGui 
import sys 
app = QtGui.QApplication(sys.argv) 
QtGui.QImageReader.supportedImageFormats() 

Questo è stato fastidioso per rintracciare, quindi speriamo questo sarà utile per gli altri.

+1

Quindi, mi sono imbattuto in questo con virtualenvs su Windows (copiato PyQt4 da global site-packages a envs site-packages) - Ho dovuto creare il qt.conf come specificato nell'originale postare accanto a Scripts \ python.exe - quindi tutto ha funzionato come dovrebbe! – Strayer

+0

Se qualcuno sa come caricare i plug-in senza creare QApplication, si prega di aggiungere un commento qui; sarebbe molto utile per quelli di noi che usano semplicemente QImage come una classe di caricamento di immagini di utilità. – GaryO

+0

Il mio non funzionerà fino a quando non metto la chiamata QApplication in __main__. Non funzionava con QApplication in main() come lo hai mostrato. Molto strano, ma l'eliminazione dell'uso di main() lo ha risolto per me. – panofish

0

Nel caso in cui qualcuno stia cercando i plug-in di caricamento, ho created an answer for a more proper question here per consentire in pratica di mettere i plugin in qualsiasi cartella condivisa di rete.

In breve, utilizzare QtCore.QCoreApplication.addLibraryPath() anziché il file qt.conf.