为了将桌面启动器中的一个图标下的给定应用程序的多个实例分组(我使用的是Ubuntu 17.04),它们必须具有WM_CLASS字符串的相同appName属性。例如,如果我运行emacs
两次:
$ emacs &
$ emacs &
这两个实例都会显示在桌面启动栏的Emacs图标下。原因是两个实例都具有相同的WM_CLASS字符串。我们可以使用
检查这个字符串$ xprop WM_CLASS
然后单击Emacs窗口。然后显示:
WM_CLASS(STRING) = "emacs", "Emacs"
这里" emacs"是资源(appName)," Emacs"是className, 有关详细信息,请参阅xdotool: what are “class” and “classname” for a window?。
考虑这个程序(my-tkapp.py
):
#! /usr/bin/env python
import tkinter as tk
root = tk.Tk(className='myTkApp')
label = tk.Label(root, text="Hello World")
label.pack()
root.mainloop()
如果我运行这个程序两次:
$ my-tkapp.py &
$ my-tkapp.py &
然后运行xprop
以检查两个窗口的WM_CLASS
属性,
第一个窗口给出:
WM_CLASS(STRING) = "myTkApp", "Mytkapp"
而第二个给出:
WM_CLASS(STRING) = "myTkApp #2", "Mytkapp"
请注意,tkinter
已为应用名称属性添加了#2
后缀。这是不希望的。它使窗口管理器组将两个窗口放在桌面启动栏中的单独图标下。
如何为我的应用程序的不同实例保留WM_CLASS字符串的相同appName属性?
答案 0 :(得分:-1)
虽然第一个string
确实添加了后缀,但如果您在配置中使用第二个string
"Mytkapp"
,它将适用于正在运行的应用的所有版本。< / p>