2012-06-17 35 views
3

我一直在尝试从URL设置图像到QLabel。但我没有运气。 下面是我尝试做正确的现在:PyQt - 从URL设置QLabel图像

import urllib, cStringIO 
img_file = cStringIO.StringIO(urllib.urlopen(image_url).read()) 
image_file = Image.open(img_file) 

然后将其设置为QImage的:

final_image = QImage(image_file) 

self.emit(SIGNAL("finished(QImage)"), 
    final_image 
) 

的图像获得通过从一个线程返回到主界面的方法。

def set_image(self, final_image): 
    self.main_picture_pixmap = QPixmap.fromImage(final_image).scaled(
     QSize(self.picture_label.size()), 
     Qt.KeepAspectRatio, 
     Qt.FastTransformation 
    ) 
    self.picture_label.setPixmap(self.main_picture_pixmap) 

这样做,我得到的错误:

QPixmap::scaled: Pixmap is a null pixmap 

反正是有解决这个问题,或者以不同的方式来做到这一点?

回答

5

QImage.load需要一个文件名,而不是图像数据。如果你想这样做,你需要使用QImage.loadFromData

+0

我试过了,我也得到了错误 “”“QImage.loadFromData(STR,STR格式=无):不受约束的方法必须有型‘的QImage’的第一个参数‘’” 也许我不是读取的权利,将其存储到一个字符串? – Edvinauskas

+1

线索是'unbound method':你必须在'QImage'的实例上使用它,而不是在类上。 [这](http://pastebin.com/2h6JHkBh)应该工作 – mata

+0

太棒了!它的工作原理,谢谢!问题是从URL中获取图像。 – Edvinauskas

6

简单的公式从URL加载图像到一个图标。

from PyQt4.QtGui import QPixmap, QIcon 
import urllib 

url = 'http://example.com/image.png'  
data = urllib.urlopen(url).read() 
pixmap = QPixmap() 
pixmap.loadFromData(data) 
icon = QIcon(pixmap)