2009-11-11 3 views
2

В настоящее время у меня есть изображение PIL, которое я хотел бы отображать в окне PyQt. Я знаю, что это должно быть легко, но я не могу найти нигде, как это сделать. Может ли кто-нибудь дать мне руку на это? Вот код из окна я в настоящее время:Как загрузить растровое изображение в окне на PyQt

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: Согласно Rapid Gui Программирование с Qt и Python:

Согласно документации PyQt, в QPixmaps оптимизированы для на экране дисплей (так что они быстро рисуются), и QImages оптимизированы для редактирования (именно поэтому мы использовали их в , сохраняя данные изображения).

У меня есть сложный алгоритм, который будет генерировать изображения, которые я хочу показать в моем окне. Они будут созданы довольно быстро, поэтому пользователю они будут выглядеть так же, как анимация (может быть как 15+, 20+ из них в секунду). Должен ли я использовать QPixmaps или QImages?

ответ

2

попробовать что-то вроде этого, вы можете использовать http://svn.effbot.org/public/stuff/sandbox/pil/ImageQt.py конвертировать любые 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_()) 
+0

просто нит выбор, но не ваш конкретизации начать с буквы нижнего регистра 'imageLabel'. – John

+0

@johnthexiii, да, вы правы, исправлены. –

1

С точностью до this discussion самым быстрым способом было бы использовать GLPainter, чтобы использовать производительность графической карты.

 Смежные вопросы

  • Нет связанных вопросов^_^