Håk*_*and 4 icons python window-manager launcher .desktop
我正在尝试为显示 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()
Run Code Online (Sandbox Code Playgroud)
该脚本是可执行的。我正在使用pyenv,所以如果我从以下运行gnome-terminal:
$ which python3
/home/hakon/.pyenv/shims/python3
Run Code Online (Sandbox Code Playgroud)
我创建了一个桌面文件(文件位置:)~/.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
Run Code Online (Sandbox Code Playgroud)
对于图标,我只是(出于测试目的)复制了其中一个标准图标:
cp /usr/share/icons/hicolor/48/apps/apport.png /home/hakon/icons/my-tk-app-icon.png
Run Code Online (Sandbox Code Playgroud)
desktop-file-validate在桌面文件上运行命令没有输出,所以桌面文件应该没问题。
但是,当我从终端运行 python 脚本时:
~/my-tkapp.py
Run Code Online (Sandbox Code Playgroud)
我仍然在启动器中看到通用的问号图标。
我在这里俯瞰什么?
由于您的问题得到了很好的记录,我们可以找到问题:)
在您的应用程序中,您设置:
root = tk.Tk(className='MyTkApp')
Run Code Online (Sandbox Code Playgroud)现在,如果您打开终端,请键入:
$ xprop WM_CLASS
Run Code Online (Sandbox Code Playgroud)
然后单击您的应用程序窗口,它显示:
WM_CLASS(STRING) = "myTkApp", "Mytkapp"
Run Code Online (Sandbox Code Playgroud)这只是不一样的,你设置的窗口类; 首都不同。唯一的结论是,由于某种原因,您设置的窗口类(capital-format)不被窗口管理器接受。
当我将您的启动器更改为匹配时myTkApp:
$ xprop WM_CLASS
Run Code Online (Sandbox Code Playgroud)
它工作正常(为了方便起见,我设置了 Firefox 图标,因为我没有你的图标):
WM_CLASS(STRING) = "myTkApp", "Mytkapp"
Run Code Online (Sandbox Code Playgroud)
结果: