So laden Sie eine Bitmap auf einem Fenster auf PYQT
Frage
Ich habe derzeit ein PIL -Bild, das ich gerne in einem Pyqt -Fenster anzeigen möchte. Ich weiß, dass dies einfach sein muss, aber ich kann nirgendwo finden, wie es geht. Könnte mir jemand die Hand geben? Hier ist der Code des Fensters, den ich derzeit habe:
import sys
from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Window')
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
Bearbeiten: Laut Rapid GUI -Programmierung mit QT und Python:
Laut der Dokumentation von PYQT sind QPIXMAPs für die Anzeige auf dem Bildschirm optimiert (so dass sie schnell zeichnen), und Qimages sind für die Bearbeitung optimiert (weshalb wir sie verwendet haben, um die Bilddaten zu halten).
Ich habe einen komplexen Algorithmus, der Bilder generiert, die ich in meinem Fenster zeigen möchte. Sie werden ziemlich schnell erstellt, so dass sie für den Benutzer genauso aussehen wie eine Animation (es kann 15+ und 20+ pro Sekunde geben). Soll ich dann Qpixmaps oder Qimages verwenden?
Lösung
Probieren Sie so etwas aus, Sie können verwenden http://svn.effbot.org/public/stuff/sandbox/pil/imageqt.py Um jedes PIL -Bild in Qimage umzuwandeln
import sys
from PyQt4 import QtGui
from PIL import Image
def get_pil_image(w, h):
clr = chr(0)+chr(255)+chr(0)
im = Image.fromstring("RGB", (w,h), clr*(w*h))
return im
def pil2qpixmap(pil_image):
w, h = pil_image.size
data = pil_image.tostring("raw", "BGRX")
qimage = QtGui.QImage(data, w, h, QtGui.QImage.Format_RGB32)
qpixmap = QtGui.QPixmap(w,h)
pix = QtGui.QPixmap.fromImage(qimage)
return pix
class ImageLabel(QtGui.QLabel):
def __init__(self, parent=None):
QtGui.QLabel.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Window')
self.pix = pil2qpixmap(get_pil_image(50,50))
self.setPixmap(self.pix)
app = QtGui.QApplication(sys.argv)
imageLabel = ImageLabel()
imageLabel.show()
sys.exit(app.exec_())
Andere Tipps
Regierung zu Diese Diskussion, Der schnellste Weg wäre die Verwendung von Glpainter, um der Grafikkartenleistung zu profitieren.