3

我想使用 ImageQT,这样我就可以使用 Python 图像库 (PIL) 进行图像处理并使用 Qt4 渲染结果。我有一个简短的测试例程,它使用 PIL.Image.open 读取,使用 ImageQT 转换它并使用 QT 打开一个对话框。如果我只是使用 Qt 来读取图像,它就可以工作。我错过了什么?

#!/usr/bin/python3.3
import sys
from PIL import Image
from PIL.ImageQt import ImageQt
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QImage

app = QtGui.QApplication(sys.argv)
# added initialization after first suggestion below
QtGui.QImageReader.supportedImageFormats()

im = Image.open('test.gif')
image = ImageQt(im)
pixmap = QtGui.QPixmap(image)
# pixmap = QtGui.QPixmap('test.gif')

widget = QtGui.QWidget()
hbox = QtGui.QHBoxLayout(widget)
lbl = QtGui.QLabel(widget)
lbl.setPixmap(pixmap)
hbox.addWidget(lbl)
widget.setLayout(hbox)
widget.show()        
sys.exit(app.exec_())

测试.gif
(来源:www.sonic.net 上的 sjs

注意:在第一个建议之后添加了额外的 QtGui 初始化。结果还是一样。

4

3 回答 3

6

该示例的问题是它试图通过将 QImage 直接传递给 QPixmap 构造函数来将其转换为 QPixmap,这是不受支持的。

相反,您需要这样做:

im = Image.open('test.gif')
image = ImageQt(im)
pixmap = QtGui.QPixmap.fromImage(image)
于 2013-11-27T18:59:09.643 回答
1

为了使其在 win + unix 上工作,建议使用以下方法:

PilImage = Image.open('kitten.jpg')
QtImage1 = ImageQt.ImageQt(PilImage)
QtImage2 = QtGui.QImage(QtImage1)
pixmap = QtGui.QPixmap.fromImage(QtImage2)
label = QtGui.QLabel('', self)
label.setPixmap(pixmap)

资料来源:http ://skilldrick.co.uk/2010/03/pyqt-pil-and-windows/

于 2016-09-16T19:16:20.720 回答
0

我没有看到您初始化 QtGui.QApplication,这是加载 Qt 支持的额外格式所必需的。考虑到您使用 PIL,我不确定这是否有必要。不过你可以试试。请参阅这篇文章的底部答案: 可能的解决方案

于 2013-09-14T19:05:05.927 回答