2011-11-05 50 views
2

爲什麼這段代碼顯示一個沒有圖像的窗口?我嘗試使用QByteArray而不是StringIO,但我有相同的結果。有人知道答案嗎?PyQt和字符串中的圖像

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的圖像(或任何RAM另一個對象),因爲我pycurl下載它不保存到硬盤。

更新2: 添加布局使用,如Petr Viktorin建議,但代碼仍然不工作。

UPDATE 3: @Petr Viktorin,這個代碼只在我想顯示PNG文件時才起作用,但是當圖像--Jpeg/jpg時,我看到空的表單。也許問題在QPixmap?

更新4: 測試了各種圖像,但... http://i39.tinypic.com/3535mqd.jpg哪裏有問題?

+0

這不是一個更簡單的解決方案嗎? 'pic = QtGui.QPixmap(「:/ img/image.png」)' – RobinJ

+0

您從@ PetrViktorin的答案更新了您的問題,但您沒有註冊或接受它。你的問題現在解決了嗎?還是不是? – ekhumoro

+2

該代碼現在適用於我。 –

回答

4

您沒有將標籤添加到主窗口。最簡單的解決方法是:

lbl=QtGui.QLabel(self) 

而妥善的解決辦法是使用一些layout,所以窗口將具有適當的大小。添加後lbl.setPixmap(p)

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