Domanda

Al momento ho un immagine PIL che mi piacerebbe per visualizzare su una finestra PyQt. So che questo deve essere facile, ma non riesco a trovare da nessuna parte come farlo. Qualcuno potrebbe darmi una mano su questo? Ecco il codice della finestra momento ho:

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_())

Modifica: Secondo Rapid Gui programmazione con Qt e Python:

  

Secondo la documentazione di PyQt,   QPixmaps sono ottimizzati per sullo schermo   display (in modo che siano veloci a disegnare),   e QImages sono ottimizzati per l'editing   (Che è il motivo per cui li abbiamo utilizzati per   contenere i dati dell'immagine).

Ho un complesso algoritmo che genera le immagini che voglio mostrare sulla mia finestra. Saranno creati abbastanza veloce, quindi per l'utente che avrà un aspetto proprio come un'animazione (non ci può essere come 15+, 20+ di loro al secondo). Dovrebbe quindi utilizzare QPixmaps o QImages?

È stato utile?

Soluzione

provare qualcosa di simile, è possibile utilizzare http: // svn .effbot.org / public / stuff / sandbox / PIL / ImageQt.py di convertire qualsiasi immagine pil per 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_())

Altri suggerimenti

questo discussione, il più veloce modo sarebbe quello di utilizzare GLPainter al fine di beneficiare delle prestazioni della scheda grafica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top