我正在尝试为显示 Tkinter 窗口的自定义 Python 脚本添加启动器图标(脚本位置/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
它运行良好(为了方便,我设置了 Firefox 图标,因为我没有你的图标):
[Desktop Entry]
Type=Application
Terminal=false
Name=My Tk Application
Exec=/home/jacob/Bureaublad/testapp.py
Icon=firefox
StartupWMClass=myTkApp
结果: