Как загрузить растровое изображение на окно на PYQT
Вопрос
В настоящее время у меня есть изображение 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, чтобы получить пользу от производительности графической карты.