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

时间:2018-01-14 23:43:02

标签: python pyqt qicon

嗨,我的PyQt5 setWindowIcon存在问题。

当我尝试从本地图像设置窗口图标时,它完美地运行。但是当我尝试建立一个在线链接时:

setWindowIcon( QIcon("https://www.google.ge/images/branding/product/ico/googleg_lodp.ico") )
这是行不通的。该怎么办?它的32x32 ico btw。
〜感谢

1 个答案:

答案 0 :(得分:1)

您必须使用QNetworkAccessManager手动从网址下载图片。然后从响应中读取字节,创建一个QPixmap(因为它有loadFromData方法)并从QPixmap初始化QIcon。

之后,您将能够设置窗口图标。

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