MacOS系统下如何为PyQt5应用设置自定义图标
MacOS系统下如何为PyQt5应用设置自定义图标
我太懂你这种烦恼了!在Mac上用PyQt5写应用,本来想给dock换上自己的自定义图标,结果用setWindowIcon试了半天,dock上还是那个默认的Python Launcher图标,简直头大😅。其实这是因为MacOS的图标机制和其他系统不一样——setWindowIcon只能改窗口标题栏上的小图标,而dock上显示的是进程的图标,直接跑Python脚本的话,进程属于Python解释器,自然显示的是Python Launcher的图标。下面给你两种实用的解决办法:
一、打包成正式.app应用(推荐,标准做法)
这是Mac上分发应用的正规方式,打包后你的应用会变成独立的.app文件,dock图标也会完全换成你自定义的。我推荐用PyInstaller来打包,步骤超简单:
把PNG转成Mac专用的ICNS格式
Mac系统偏好用.icns作为应用图标,你可以用自带的预览APP来转换:- 用预览打开你的
icon.png - 点击菜单栏「文件」→「导出」,格式选择「ICNS」,保存为
icon.icns(和脚本放在同一目录)
- 用预览打开你的
用PyInstaller打包
打开终端,进入你的脚本所在目录,运行下面的命令(把your_script.py换成你实际的脚本文件名):pyinstaller --onefile --windowed --icon=icon.icns your_script.py打包完成后,去当前目录的
dist文件夹里找生成的.app文件,双击打开它,dock上就会显示你的自定义图标啦!
二、开发调试时的临时办法(不用打包)
如果只是开发阶段想临时看到自定义图标,不想每次都打包,可以用下面的小技巧,通过AppleScript修改当前Python进程的图标:
- 先按上面的方法把
icon.png转成icon.icns,放在脚本同一目录 - 在你的PyQt5代码里加上这段逻辑:
注意:这个方法需要脚本有系统权限,而且如果同时跑了多个Python进程,可能会搞混图标,所以只适合开发调试的时候用哦。from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtGui import QIcon import os import subprocess app = QApplication([]) window = QWidget() window.setWindowTitle('Alarm App') # 先设置窗口标题栏的图标 window.setWindowIcon(QIcon("icon.png")) # 尝试修改dock上的进程图标(仅MacOS生效) icns_path = os.path.abspath("icon.icns") if os.path.exists(icns_path): subprocess.run([ "osascript", "-e", f'tell application "System Events" to set the icon of process "Python" to POSIX file "{icns_path}"' ]) label = QLabel('Alarm App', window) label.move(100, 50) window.show() app.exec_()
备注:内容来源于stack exchange,提问作者AlwaysNur
相关产品推荐
相关产品推荐

