PyQt与字符串中的图像
为什么这段代码显示的窗口没有图片呢?我试着用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)