2016-05-17 3 views
0

Ich versuche, Bilder zu laden Ich kann nicht herausfinden, wie man die Bilder mit pkgutil.get_data() lädt, die ich lieber verwenden würde, da ich keine festen Pfade in meinem Code haben möchte.Laden von QIcons mit pkgutil

Derzeit habe ich so etwas, das funktioniert nur, wenn aus dem gleichen Ordner ausgeführt wird.

... 
    self.imagePixmap = QtGui.QPixmap("img/myImage.png") 
... 

Die Frage ist dann, wird, wenn Sie das Skript aus anderen Ordnern den Weg laufen vermasselt und diese Fehlermeldung angezeigt:

QPixmap::scaled: Pixmap is a null pixmap

Ich möchte wie etwas verwenden: pkutil.get_data("img", "myImage.png") die laden Bilder aber dies liefert die Daten aus der Bilddatei, wo QPixmap() andere Arten von Daten will.

Die einzige „Abhilfe“ ich sehe ist ein Teil zu verwenden, was sie hier angeben: pkgutil.get_data und etwas zu tun, wie folgt aus:

self.myPath = os.path.dirname(sys.modules[__name__].__file__) 
self.imagePixmap = QtGui.QPixmap(os.path.join(self.myPath,"img/myImage.png")) 

Dies scheint nur zu viel von einem kludge mir. Gibt es einen besseren Weg?

Antwort

0

Hier ist, was ich herausgefunden habe. Ich sollte rtfm etwas näher haben. Jedenfalls können Sie die loadFromData() Methode verwenden, um Daten von einem QByteArray zu erhalten und es das Format der Daten darin zu übergeben.

self.imagePixmap = QtGui.QPixmap() 
self.imagePixmap.loadFromData(get_data(__name__, "img/myImage.png"), 'png') 

Hier ist ein Link zu den Informationen from here:

bool QPixmap::loadFromData(const QByteArray &data, const char *format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor)

This is an overloaded function.

Loads a pixmap from the binary data using the specified format and conversion flags.