PyQt6 显示网络图片

276 阅读1分钟

使用 requests 获取网络图片 需要有一个 label 控件

    req = requests.get("https://xxx.png")
    photo = QtGui.QPixmap()
    photo.loadFromData(req.content)
    self.label.setPixmap(photo)

需要引入

    import requests
    from PyQt6 import QtCore, QtWidgets, QtGui
    from PyQt6.QtWidgets import QWidget

这样会产生阻塞 可以用异步的方法来获取

from PyQt6 import QtCore, QtWidgets, QtGui, QtNetwork
from PyQt6.QtWidgets import QWidget


class Ui_Images(QWidget):

    def __init__(self):
        super(Ui_Images, self).__init__()
        self.setupUi(self)

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(338, 345)
        self.label = QtWidgets.QLabel(parent=Form)
        self.label.setGeometry(QtCore.QRect(10, 10, 311, 321))
        self.label.setObjectName("label")

        self.loading_label = QtWidgets.QLabel("加载中...", parent=Form)
        self.loading_label.setGeometry(QtCore.QRect(10, 10, 311, 321))
        self.loading_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.loading_label.setObjectName("loading_label")

        self.manager = QtNetwork.QNetworkAccessManager()
        self.manager.finished.connect(self.onFinished)
        url = "https://xxx.jpg"
        self.manager.get(QtNetwork.QNetworkRequest(QtCore.QUrl(url)))

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def onFinished(self, reply):
        image_data = reply.readAll()
        photo = QtGui.QPixmap()
        photo.loadFromData(image_data)
        self.label.setPixmap(photo)
        self.loading_label.hide()

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "显示图片"))