QNetworkManager and QNetworkReply signals not emitting on PySide6

117 Views Asked by At

QNetworkReply is not emitting finished, errorOccurred or redirected signals on PySide6. Below is a code snippet to show the problem:

from typing import Callable
import PySide6.QtNetwork as QtNetwork
from PySide6 import QtCore, QtGui, QtWidgets
import sys


def load_img_from_url(url_str, callback):
    # type: (str, Callable[[QtGui.QImage], None]) -> None

    url = QtCore.QUrl(url_str)
    if url.isValid():
        QtCore.qDebug("load_img_from_url: url is valid => " + url.url())
        
        QtNetwork.QNetworkProxyFactory.setUseSystemConfiguration(True)
        request = QtNetwork.QNetworkRequest(url)
        manager = QtNetwork.QNetworkAccessManager(None)
        
        def handle_reply(reply):
            # type: (QtNetwork.QNetworkReply) -> None
            print("reply object => ", reply)

            if reply.error() == QtNetwork.QNetworkReply.NetworkError.NoError:
                print("QNetworkReply No error")
                response_data = reply.readAll()
                image = QtGui.QImage()
                if image.loadFromData(response_data):
                    QtCore.qDebug("load_img_from_url: Image Loaded")
                    if callable(callback):
                        callback(image)
                else:
                    QtCore.qDebug("load_img_from_url: Image Not Loaded")

            else:
                print("QNetworkReply Error!")

        manager.finished.connect(lambda r: print("manager reply", r))
        
        reply = manager.get(request)

        reply.finished.connect(handle_reply)
        reply.redirected.connect(lambda r: print("redirected", r))

        def handle_error(error):
            print("QNetworkReply Error")
            print(error)
            
        reply.errorOccurred.connect(handle_error)

        QtCore.qDebug("load_img_from_url: QNetworkReply isFinished? "+ str(reply.isFinished()))

class TestWindow(QtWidgets.QMainWindow):
    def __init__(self, parent) -> None:
        super().__init__(parent)

        load_img_from_url("https://cdn.pixabay.com/photo/2014/06/03/19/38/road-sign-361514_960_720.png", None)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    widget = TestWindow(None)
    widget.show()

    sys.exit(app.exec())

I can't seem to find out what the problem is.

0

There are 0 best solutions below