【问题标题】:How do I set the the app name of the WM_CLASS string of a tkinter window?如何设置 tkinter 窗口的 WM_CLASS 字符串的应用程序名称?
【发布时间】:2017-12-01 09:54:40
【问题描述】:

简介

为了将给定应用程序的多个实例分组到桌面启动器中的一个图标下(我使用的是 Ubuntu 17.04),它们必须具有 WM_CLASS 字符串的相同 appName 属性。例如,如果我运行emacs 两次:

$ emacs &
$ emacs &

这两个实例都将显示在桌面启动栏中的 Emacs 图标下。原因是两个实例具有相同的 WM_CLASS 字符串。我们可以使用

来检查这个字符串
$ xprop WM_CLASS

然后单击 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 已在应用名称属性中添加了 #2 后缀。这是不希望的。它使窗口管理器将两个窗口分组在桌面启动栏中的单独图标下。

如何为我的应用程序的不同实例保留 WM_CLASS 字符串的相同 appName 属性?

另见

How to add launcher icon for python script?

【问题讨论】:

  • 您找到解决此问题的方法了吗?请分享!!!
  • @DimitrisDimitriadis 这就是我已经走了多远:bugs.python.org/issue30791。我还没有时间进入 Python 和 Tcl 源代码来追踪这个错误..

标签: python ubuntu tkinter


【解决方案1】:

虽然第一个string 确实添加了后缀,但如果您在配置中使用第二个string "Mytkapp",它将适用于正在运行的应用程序的所有版本。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 2010-09-07
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多