You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派中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值:

  1. 启动应用,打开终端执行xprop WM_CLASS命令
  2. 点击应用窗口,终端会输出类似WM_CLASS(STRING) = "python3", "Python3"的结果
  3. 将得到的类名(如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. 规范图标存放路径并更新缓存

将图标放到系统标准图标目录,让系统更容易识别:

  1. 创建图标目录(如果不存在):
    mkdir -p ~/.local/share/icons/hicolor/32x32/apps/
    
  2. 复制图标到该目录:
    cp /home/roland/projects/pi_thermal_camera/icon.png ~/.local/share/icons/hicolor/32x32/apps/
    
  3. 更新图标缓存:
    gtk-update-icon-cache ~/.local/share/icons/hicolor/
    
  4. 修改.desktop文件的Icon字段为图标文件名(无需路径):
    Icon=icon
    

内容的提问来源于stack exchange,提问作者Roland Kwee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 07:40:16