为了将给定应用程序的多个实例分组到桌面启动器的一个图标下(我使用的是Ubuntu 17.04),它们必须具有WM_类字符串的相同appName属性。例如,如果我运行emacs
两次:
$ emacs &
$ emacs &
这两个实例都将显示在桌面启动栏中的Emacs图标下。原因是两个实例都有相同的WM_类字符串。我们可以用
^{pr2}$然后单击Emacs窗口。然后显示:
WM_CLASS(STRING) = "emacs", "Emacs"
这里“emacs”是资源(appName),“emacs”是类名, 有关详细信息,请参见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
已向app name属性添加了一个#2
后缀。这是不需要的。它使窗口管理器将两个窗口分组到桌面启动栏中不同的图标下。在
如何为应用程序的不同实例保留WM_类字符串的相同appName属性?在
虽然第一个
string
添加了后缀,但是如果您在配置中使用第二个string
,"Mytkapp"
,它将应用于正在运行的应用程序的所有版本。在相关问题 更多 >
编程相关推荐