Как загрузить растровое изображение на окно на PYQT

StackOverflow https://stackoverflow.com/questions/1713306

  •  19-09-2019
  •  | 
  •  

Вопрос

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

РЕДАКТИРОВАТЬ: Согласно быстрому программированию GUI с помощью QT и Python:

Согласно документации PYQT, QPixMaps оптимизированы для дисплея на экране (поэтому они быстро нарисовать), а Qimages оптимизированы для редактирования (поэтому мы использовали их для хранения данных изображения).

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

Это было полезно?

Решение

Попробуйте что -то подобное, вы можете использовать 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_())

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top