Search code examples
pythonpyqtqicon

PyQt5 5.9 , setWindowIcon( QIcon(*WEB_LINK*) )


Hi, I have an issue with my PyQt5 setWindowIcon.

When I try to set my window icon from a local image, it works perfectly. But when I try to put a online link like:

setWindowIcon( QIcon("https://www.google.ge/images/branding/product/ico/googleg_lodp.ico") )
it does not work. What to do? Its 32x32 ico btw.
~Thanks


Solution

  • You have to use QNetworkAccessManager and manually download image from url. Then read bytes from response, create a QPixmap (beacuse it has loadFromData method) and initialize a QIcon from QPixmap.

    And after that you will be able to set window icon.

    import sys
    
    from PyQt5.QtCore import QUrl
    from PyQt5.QtGui import QIcon, QPixmap
    from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
    from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
    
    ICON_IMAGE_URL = "https://www.google.ge/images/branding/product/ico/googleg_lodp.ico"
    
    
    class MainWindow(QWidget):
        def __init__(self):
            QWidget.__init__(self)
    
            self.label = QLabel('Image loading demo')
    
            self.vertical_layout = QVBoxLayout()
            self.vertical_layout.addWidget(self.label)
    
            self.setLayout(self.vertical_layout)
    
            self.nam = QNetworkAccessManager()
            self.nam.finished.connect(self.set_window_icon_from_response)
            self.nam.get(QNetworkRequest(QUrl(ICON_IMAGE_URL)))
    
        def set_window_icon_from_response(self, http_response):
            pixmap = QPixmap()
            pixmap.loadFromData(http_response.readAll())
            icon = QIcon(pixmap)
            self.setWindowIcon(icon)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())