如何设置tkinter窗口的WM_类字符串的应用程序名?

2024-03-28 18:39:06 发布

您现在位置:Python中文网/ 问答频道 /正文

简介

为了将给定应用程序的多个实例分组到桌面启动器的一个图标下(我使用的是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属性?在

另请参见

How to add launcher icon for python script?


Tags: 实例字符串pystring属性my桌面tk