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

问题描述 投票:0回答:2

嗨, 我的 PyQt5 setWindowIcon 有问题。

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

setWindowIcon( QIcon("https://www.google.ge/images/branding/product/ico/googleg_lodp.ico") )

这是行不通的。该怎么办?顺便说一句,它是 32x32 ico。
~谢谢

python pyqt qicon
2个回答
2
投票

您必须使用

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

0
投票

另一个答案对我不起作用。这就是有效的方法。

from PyQt5.Qt import *
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtWidgets import QApplication

url = 'https://stackoverflow.com/q/48255299/2192488'

class Browser(QWebEngineView):

    def __init__(self):
        super().__init__()
        self.iconChanged.connect(self.setWindowIcon)

app = QApplication(sys.argv)
web = Browser()
web.load(QUrl(url))
web.show()
sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.