树莓派中Python应用运行时自定义图标被默认图标替换的解决方法
树莓派Python应用运行时任务栏图标显示异常的解决办法
问题背景
为Python应用创建的.desktop文件在系统菜单和任务栏启动栏能正常显示自定义32×32图标,Ubuntu系统中启动应用后任务栏图标也正常,但在树莓派上,运行中的应用图标会被替换为终端样式的默认图标。.desktop文件位于~/.local/share/applications,内容如下:
[Desktop Entry] Name=Infrared Camera Comment=Take photos with both the infrared and visible light camera Icon=/home/roland/projects/pi_thermal_camera/icon.png Exec=/home/roland/projects/pi_thermal_camera/IR_Photo_buttons.py Type=Application Encoding=UTF-8 Terminal=false Categories=Other;
解决方案
1. 在Python代码中指定窗口图标与WM_CLASS
树莓派的桌面环境(如LXDE/PiXEL)会通过窗口的WM_CLASS属性匹配.desktop文件,Python GUI程序默认未设置该属性时,系统会将其识别为终端类程序。根据你使用的GUI框架添加对应代码:
- Tkinter框架:
import tkinter as tk root = tk.Tk() # 设置窗口图标 root.wm_iconphoto(True, tk.PhotoImage(file='/home/roland/projects/pi_thermal_camera/icon.png')) # 设置WM_CLASS,第一个参数为类名,第二个为窗口名称,需与.desktop的Name对应 root.wm_class('InfraredCamera', 'Infrared Camera') - PyQt框架:
from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import QIcon import sys app = QApplication(sys.argv) # 设置应用图标 app.setWindowIcon(QIcon('/home/roland/projects/pi_thermal_camera/icon.png')) # 设置应用名称,匹配.desktop文件的Name字段 app.setApplicationName("Infrared Camera")
2. 为.desktop文件添加StartupWMClass字段
先获取运行中应用的WM_CLASS值:
- 启动应用,打开终端执行
xprop WM_CLASS命令 - 点击应用窗口,终端会输出类似
WM_CLASS(STRING) = "python3", "Python3"的结果 - 将得到的类名(如
python3)添加到.desktop文件中:[Desktop Entry] Name=Infrared Camera Comment=Take photos with both the infrared and visible light camera Icon=/home/roland/projects/pi_thermal_camera/icon.png Exec=/home/roland/projects/pi_thermal_camera/IR_Photo_buttons.py Type=Application Encoding=UTF-8 Terminal=false Categories=Other; StartupWMClass=python3 # 替换为xprop获取的实际值
添加后保存文件,重启应用即可生效。
3. 规范图标存放路径并更新缓存
将图标放到系统标准图标目录,让系统更容易识别:
- 创建图标目录(如果不存在):
mkdir -p ~/.local/share/icons/hicolor/32x32/apps/ - 复制图标到该目录:
cp /home/roland/projects/pi_thermal_camera/icon.png ~/.local/share/icons/hicolor/32x32/apps/ - 更新图标缓存:
gtk-update-icon-cache ~/.local/share/icons/hicolor/ - 修改
.desktop文件的Icon字段为图标文件名(无需路径):Icon=icon
内容的提问来源于stack exchange,提问作者Roland Kwee
相关产品推荐
相关产品推荐

