Pregunta

Actualmente tengo una imagen PIL que me gustaría que se mostrará en una ventana PyQt. Sé que esto debe ser fácil, pero no puedo encontrar en cualquier lugar de cómo hacerlo. ¿Podría alguien darme una mano en esto? Aquí está el código de la ventana actualmente tengo:

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: De acuerdo con la programación rápida Gui con Qt y Python:

  

De acuerdo con la documentación de PyQt,   QPixmaps están optimizados para en pantalla   pantalla (por lo que son rápidos para dibujar),   y QImages están optimizados para la edición   (Por eso los hemos usado para   mantener los datos de imagen).

Tengo un algoritmo complejo que va a generar imágenes que desea mostrar en la ventana. Ellos serán creados bastante rápido, por lo que el usuario que se verá como una animación (no puede ser como 15+, 20+ de ellos por segundo). Debería entonces utilizar QPixmaps o QImages?

¿Fue útil?

Solución

intentar algo como esto, puede utilizar http: // SVN .effbot.org / / stuff / recinto de seguridad pública / pil / ImageQt.py para convertir cualquier imagen a Qimage pil

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

Otros consejos

este discusión, el más rápido manera sería utilizar GLPainter con el fin de beneficiarse del rendimiento de la tarjeta gráfica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top