Como carregar um bitmap em uma janela no pyqt
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?
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.