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

oul*_*ipo 2 python qt image pyqt python-imaging-library

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

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

https://gist.github.com/f6d479f286ad75bf72b7

有人有主意吗?

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

Seb*_*ter 5

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

\n\n
#!/usr/bin/python\n# -*- coding: utf-8 -*-\n#written by Sebastian Stetter in 2010\n\n\nimport sys\nfrom PIL import Image\nfrom PIL.ImageQt import ImageQt\n\nfrom PyQt4.QtGui import *\nfrom PyQt4.QtCore import *\n\n\n\ndef PILimageToQImage(pilimage):\n    """converts a PIL image to QImage"""\n    imageq = ImageQt(pilimage) #convert PIL image to a PIL.ImageQt object\n    qimage = QImage(imageq) #cast PIL.ImageQt object to QImage object -that\xc2\xb4s the trick!!!\n    return qimage\n\n\n\n\nif __name__ == "__main__":\n    #Testcode\n    app = QApplication(sys.argv)\n\n    pim = Image.open(unicode(QFileDialog().getOpenFileName()))\n    pim.show() #show pil image\n\n    qim = PILimageToQImage(pim)\n    pm = QPixmap(qim)\n    lbl = QLabel()\n    lbl.setPixmap(pm)\n    lbl.show() #show label with qim image\n\n    sys.exit(app.exec_())\n
Run Code Online (Sandbox Code Playgroud)\n