PyQt与字符串中的图像

2 投票
1 回答
1445 浏览
提问于 2025-04-17 05:41

为什么这段代码显示的窗口没有图片呢?我试着用QByteArray替代StringIO,但结果还是一样。有人知道原因吗?

import sys
from PyQt4 import QtGui, QtCore
from StringIO import StringIO
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        cs=StringIO()
        cs.write(open("image.jpeg",'rb').read())
        p = QtGui.QPixmap()
        p.loadFromData(cs.getvalue())
        lbl=QtGui.QLabel()
        lbl.setPixmap(p)
        layout = QtGui.QHBoxLayout(self)
        layout.addWidget(lbl)
        self.move(20, 30)
        self.setWindowTitle('Picture')
        self.show()


app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

更新:我需要从StringIO(或者其他在内存中的对象)显示图片,因为我用pycurl下载图片时并没有保存到硬盘。

更新2:按照Petr Viktorin的建议,添加了布局,但代码还是不工作。

更新3:@Petr Viktorin,这段代码只有在我想显示PNG文件时有效,但当图片是Jpeg/jpg格式时,我看到的是空白的窗口。可能是QPixmap的问题吗?

更新4:我测试了各种图片,但……http://i39.tinypic.com/3535mqd.jpg 问题出在哪里呢?

1 个回答

4

你没有把标签加到主窗口里。最简单的解决办法是:

lbl=QtGui.QLabel(self)

而正确的做法是使用一些 布局,这样窗口的大小才会合适。在 lbl.setPixmap(p) 之后加上这个:

layout = QtGui.QHBoxLayout(self)
layout.addWidget(lbl)

撰写回答