如何为Python脚本添加启动器图标?

我正在尝试为一个自定义的Python脚本添加一个启动器图标,显示一个Tkinter窗口(脚本位置:/home/hakon/my-tkapp.py):

#! /usr/bin/env python3
import tkinter as tk
root = tk.Tk(className='MyTkApp')
label = tk.Label(root, text="Hello World")
label.pack()
root.mainloop()

脚本是可执行的。我正在使用pyenv,所以如果我在gnome-terminal中运行以下命令:
$ which python3
/home/hakon/.pyenv/shims/python3

我创建了一个桌面文件(文件位置:~/.local/share/applications/my-tk-app.desktop):
[Desktop Entry]
Type=Application
Terminal=false
Name=My Tk Application
Exec=/home/hakon/my-tkapp.py
Icon=/home/hakon/icons/my-tk-app-icon.png
StartupWMClass=MyTkApp

对于图标,我只是(为了测试目的)复制了一个标准图标:
cp /usr/share/icons/hicolor/48/apps/apport.png /home/hakon/icons/my-tk-app-icon.png

在终端上运行desktop-file-validate命令对桌面文件不会产生任何输出,因此桌面文件应该是正常的。
然而,当我从终端运行Python脚本时:
~/my-tkapp.py

我在启动器中仍然看到通用的问号图标。
我在这里忽略了什么?
1个回答

由于您的问题已经很好地记录下来,我们可以找到问题的所在 :)
在你的应用程序中,你设置了:
root = tk.Tk(className='MyTkApp')
现在如果你打开一个终端,输入: $ xprop WM_CLASS
然后点击你的应用程序窗口,它会显示:
WM_CLASS(STRING) = "myTkApp", "Mytkapp"
这与您设置的窗口类别不同,大小写不同。唯一的结论是,由于某种原因,窗口管理器无法接受您设置的窗口类别(大写格式)。
当我将您的启动器更改为匹配“myTkApp”时:
StartupWMClass=myTkApp

它运行得很好(为了方便起见,我设置了火狐浏览器的图标,因为我没有你们的图标):
[Desktop Entry]
Type=Application
Terminal=false
Name=My Tk Application
Exec=/home/jacob/Bureaublad/testapp.py
Icon=firefox
StartupWMClass=myTkApp

结果如下:

enter image description here


嗨 Jacob,我现在遇到另一个问题,我认为它与tkinter有关,详见此链接的问题。 - Håkon Hægland
我也想做这个!我制作了一个图标,并按照你和Hakon的指示操作。一次成功!太棒了!谢谢你们俩! - Pedroski
对我没用。 - saulspatz