Как загрузить растровое изображение в окне на PyQt - PullRequest
2 голосов
/ 11 ноября 2009

В настоящее время у меня есть изображение PIL, которое я хотел бы отобразить в окне 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_())

Редактировать: Согласно Rapid Gui Программирование на Qt и Python:

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

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

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

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

Что касается этого обсуждения , самым быстрым способом было бы использование GLPainter для повышения производительности графической карты.

...