嗨, 我的 PyQt5 setWindowIcon 有问题。
当我尝试从本地图像设置窗口图标时,它工作得很好。但是当我尝试放置一个在线链接时,例如:
setWindowIcon( QIcon("https://www.google.ge/images/branding/product/ico/googleg_lodp.ico") )
您必须使用
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_())
另一个答案对我不起作用。这就是有效的方法。
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_())