2

我目前有一个想要在 PyQt 窗口上显示的 PIL 图像。我知道这一定很容易,但我在任何地方都找不到如何做到这一点。谁能帮我解决这个问题?这是我目前拥有的窗口的代码:

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_())

编辑:根据使用 Qt 和 Python 的快速 GUI 编程:

根据 PyQt 的文档,QPixmaps 针对屏幕显示进行了优化(因此它们可以快速绘制),并且 QImages 针对编辑进行了优化(这就是我们使用它们来保存图像数据的原因)。

我有一个复杂的算法,可以生成我想在我的窗口上显示的图片。它们的创建速度非常快,因此对用户来说它们看起来就像一个动画(每秒可能有 15+、20+ 个)。然后我应该使用 QPixmaps 还是 QImages?

4

2 回答 2

2

尝试这样的事情,您可以使用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_())
于 2009-11-12T05:32:46.243 回答
1

关于这个讨论,最快的方法是使用 GLPainter 以提高显卡性能。

于 2009-11-11T07:53:12.253 回答