PyQt - 从URL设置QLabel图片

3

我一直在尝试从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
)

图像从一个线程传回到主GUI中的方法。
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

有没有办法修复这个问题,或者有没有其他方法来解决这个问题?
2个回答

8

从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)

5

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


我尝试了一下,但是出现了错误: """ QImage.loadFromData(str, str format=None): first argument of unbound method must have type 'QImage' """ 也许我没有正确地读取URL并将其存储到字符串中? - Edvinauskas
1
线索是“未绑定方法”:您必须在“QImage”的实例上使用它,而不是在类上使用。这个应该可以工作。 - mata
太棒了!它可以工作了,谢谢!问题出在从URL获取图像上。 - Edvinauskas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接