QImage:URL而不是文件路径?

时间:2016-02-09 06:03:06

标签: python qt pyqt pyside qwidget

enter image description here

此代码将光栅像素图分配给标签。 而不是生成一个我可以简单地读取本地文件:

img = QtGui.QImage('/Users/user/Desktop/photo.jpg')

我想知道是否有办法指定URL链接而不是文件路径?那么QLabel会直接从网络上获取像素图吗?

from PyQt4 import QtCore, QtGui


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    if not QtGui.QApplication.instance():
        app=QtGui.QApplication([])

    window = QtGui.QWidget()
    window.setLayout(QtGui.QVBoxLayout())

    img = QtGui.QImage(32, 32, QtGui.QImage.Format_RGB32)
    img.fill(QtCore.Qt.red)

    pixmap = QtGui.QPixmap(img)
    lbl = QtGui.QLabel()
    lbl.setPixmap(pixmap)

    icon = QtGui.QIcon(pixmap)
    window.layout().addWidget(lbl)

    window.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:3)

据我所知,没有直接的方法可以让QImage或QPixMap直接从URL加载数据。但是你可以通过首先从URL中提取数据,然后将其加载到QPixMap来绕过它。

从网址获取数据:

import urllib2 
url_data = urllib2.urlopen(path).read()

现在将其加载到QPixMap:

pixmap = QPixmap()
pixmap.loadFromData(url_data)
lbl.setPixmap(pixmap)

值得一提的是,您应该尝试捕获urllib2.URLError等异常 或InvalidURL,处理URL受保护的情况(https)等。