Pergunta

Atualmente, tenho uma imagem PIL que gostaria de exibir em uma janela Pyqt. Eu sei que isso deve ser fácil, mas não consigo encontrar em nenhum lugar como fazê -lo. Alguém poderia me dar uma mão sobre isso? Aqui está o código da janela que tenho atualmente:

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 acordo com a programação rápida da GUI com QT e Python:

De acordo com a documentação do PYQT, o QPIXMAPS é otimizado para tela na tela (para que sejam rápidos) e o QIMAGES são otimizados para edição (e é por isso que os usamos para manter os dados da imagem).

Eu tenho um algoritmo complexo que gerará fotos que quero mostrar na minha janela. Eles serão criados muito rápido; portanto, para o usuário, eles parecerão uma animação (pode haver mais de 15, mais de 20 deles por segundo). Devo então usar o QPIXMAPS ou QIMAGES?

Foi útil?

Solução

tente algo assim, você pode usar http://svn.effbot.org/public/stuff/sandbox/pil/imageqt.py Para converter qualquer imagem PIL em 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_())

Outras dicas

Regargando para esta discussão, a maneira mais rápida seria usar o GlPainter para se beneficiar do desempenho da placa gráfica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top