Comment charger une image bitmap sur une fenêtre sur PyQt
Question
J'ai actuellement une image PIL que je voudrais afficher sur une fenêtre PyQt. Je sais que cela doit être facile, mais je ne trouve nulle part comment le faire. Quelqu'un pourrait-il me donner un coup de main à ce sujet? Voici le code de la fenêtre, j'ai actuellement:
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_())
Edit: Selon la programmation rapide avec Qt et Gui Python:
Selon la documentation de PyQt, QPixmaps sont optimisés pour l'écran affichage (donc ils sont rapides à tirer), et QImages sont optimisés pour le montage (Ce qui est la raison pour laquelle nous les avons utilisés pour maintenir les données d'image).
J'ai un algorithme complexe qui va générer des images que je veux montrer sur ma fenêtre. Ils seront créés assez rapidement, donc à l'utilisateur qu'ils regarderont comme une animation (il peut y avoir comme 15+, 20+ d'entre eux par seconde). Dois-je utiliser alors QPixmaps ou QImages?
La solution
essayer quelque chose comme cela, vous pouvez utiliser http: // svn .effbot.org / public / stuff / bac à sable / PIL / ImageQt.py pour convertir une image pil à QImage
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_())
Autres conseils
cette discussion , le plus rapide moyen serait d'utiliser GLPainter afin de bénéficier de la performance de la carte graphique.