python - 使用 PIL 和 PyQt 在小部件上绘制 QImage 时出现错误

标签 python image qt pyqt python-imaging-library

我正在尝试编写一个小型图形应用程序,并且我需要 使用 PIL 构建一些我在小部件中显示的图像。 图像构建正确(我可以使用 im.show() 检查), 我可以将其转换为 QImage,我可以将其正常保存到磁盘 (使用 QImage.save),但是如果我尝试直接在我的 QWidget,它只显示一个白色方 block 。

这里我注释掉了不起作用的代码(将 将图像转换为 QImage,然后将 QPixmap 结果转换为白色方 block ),然后我 做了一个肮脏的黑客将图像保存到临时文件并直接加载 在 QPixmap 中,它可以工作,但不是我想要做的

https://gist.github.com/f6d479f286ad75bf72b7

有人有想法吗?

如果它可以提供帮助,当我尝试将 QImage 保存在 BMP 文件中时,我可以访问其内容,但如果我尝试将其保存为 PNG,它是完全白色的

最佳答案

遇到了同样的问题,然后注意到 ImageQt 对象不是 QImage,但可以简单地转换为那些

#!/usr/bin/python
# -*- coding: utf-8 -*-
#written by Sebastian Stetter in 2010


import sys
from PIL import Image
from PIL.ImageQt import ImageQt

from PyQt4.QtGui import *
from PyQt4.QtCore import *



def PILimageToQImage(pilimage):
    """converts a PIL image to QImage"""
    imageq = ImageQt(pilimage) #convert PIL image to a PIL.ImageQt object
    qimage = QImage(imageq) #cast PIL.ImageQt object to QImage object -that´s the trick!!!
    return qimage




if __name__ == "__main__":
    #Testcode
    app = QApplication(sys.argv)

    pim = Image.open(unicode(QFileDialog().getOpenFileName()))
    pim.show() #show pil image

    qim = PILimageToQImage(pim)
    pm = QPixmap(qim)
    lbl = QLabel()
    lbl.setPixmap(pm)
    lbl.show() #show label with qim image

    sys.exit(app.exec_())

关于python - 使用 PIL 和 PyQt 在小部件上绘制 QImage 时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3041728/

相关文章:

python - 使用对象内存位置作为哈希键

python - 如何像在 MATLAB 中那样将 eig 与 nobalance 选项一起使用?

Django ImageField 和 BinaryField 如何处理图像

java - 将图像添加到 JButton

c++ - 错误 : lvalue required as left operand of assignment what to do

c++ - 编辑 QTreeWidgetItem 时捕获 ESC 键按下事件

python - 使用python在XML中不同元素具有相同名称时复制属性信息

c++ - 生成不同格式的图像字节数据

c++ - Qt、QPlainTextEdit 和非打印字符

python - Plotly:如何设置不同的标记不透明度,但为所有标记保持相同的轮廓颜色?