1

嗨,我的 PyQt5 setWindowIcon 有问题。

当我尝试从本地图像设置我的窗口图标时,它工作得很好。但是当我尝试放置一个在线链接时:

setWindowIcon( QIcon("https://www.google.ge/images/branding/product/ico/googleg_lodp.ico") )
这没用。该怎么办?顺便说一句,它的 32x32 ico。
~谢谢

4

1 回答 1

2

您必须使用QNetworkAccessManager并从 url手动下载图像。然后从响应中读取字节,创建一个 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_())
于 2018-02-22T06:58:20.753 回答