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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top