QImage:URL而不是文件路径?

Posted

技术标签:

【中文标题】QImage:URL而不是文件路径?【英文标题】:QImage: URL instead of file path? 【发布时间】:2016-02-09 06:03:05 【问题描述】:

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

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_())

【问题讨论】:

我希望你不想直接为你的小部件(qlabel)设置 url,这是无法完成的。所以替代方法是下载图像表单 url 并将其设置为小部件(QLabel) .在这种情况下,您需要使用 QNetworkManager 从网络下载图像,然后将图像设置为小部件。请阅读文档以使用 QNetworkManager(使用 url 下载内容) 【参考方案1】:

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

从 URL 获取数据:

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

现在将其加载到您的 QPixMap:

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

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

【讨论】:

在 python3.x 上'import urllib.request' 并使用'urllib.request.urlopen().read()' 请注意,这会在下载运行时阻止 GUI,这可能是一个问题,具体取决于您的连接。最好使用QNetworkAccessManager 并进行异步下载。

以上是关于QImage:URL而不是文件路径?的主要内容,如果未能解决你的问题,请参考以下文章

Django FileField 保存 url 而不是数据库中的路径

./ , ../ , ../../ , ~/ 在 asp.net 中的文件路径(URL)上的区别

为啥 os.path 指的是项目路径而不是文件路径?

检查路径在 Python 中是不是有效,而不在路径的目标处创建文件

Libragnar(Libtorrent Wrapper)LocalTorrent 文件,而不是 URL? C#/C++

使用无效 URL 调用 addPersistentStoreWithType 时崩溃 - 路径中的文件似乎不是 SQLite 数据库