This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author hakonhagland
Recipients hakonhagland
Date 2017-06-28.15:18:17
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1498663098.01.0.2360806195.issue30791@psf.upfronthosting.co.za>
In-reply-to
Content
Hello. In order to group several instances of a given application under one icon in the desktop launcher (I am using Ubuntu 17.04) they must have the same appName property of the WM_CLASS string. For example, if I run emacs twice:

$ emacs &
$ emacs &

Both instances will show up under the Emacs icon in the desktop launchbar. The reason is that both instances have the same WM_CLASS string. We can check this string using

$ xprop WM_CLASS

and then click on the Emacs window. It then shows:

WM_CLASS(STRING) = "emacs", "Emacs"
Here "emacs" is the resource (appName), and "Emacs" is the className.

Now, consider this program (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()


If I run this program twice:

$ my-tkapp.py &
$ my-tkapp.py &

and then run xprop to check the WM_CLASS property of both windows, the first window gives:

WM_CLASS(STRING) = "myTkApp", "Mytkapp"

whereas the second gives:

WM_CLASS(STRING) = "myTkApp #2", "Mytkapp"

Note that tkinter has added a #2 suffix to the app name property. This is not desired. It makes the window manager group the two windows under separate icons in the desktop launch bar.

How can I keep the same appName property of the WM_CLASS string for different instances of my application?

Note: This question was first asked at stackoverflow.com:

https://stackoverflow.com/q/44795622/2173773

I tried to follow the source from the call:

root = tkinter.Tk(className='myTkApp')

but at 5 levels down on the stack I ended up inside TCL code, and I was not able to determine who was responsible for adding the "#2" suffix.

However, a similar perl script gives the same behavior, so I suspect the problem is within the TCL TK code. Is there a way to change the
WM_CLASS property of the window after the call to tkinter.Tk, but before entering mainloop() in order to work around the issue?
After entering the mainloop(), I guess it is too late to do anything, since then the icon is already displayed in the window manager's launch bar.

I am using Ubuntu 17.04 and Python version 3.6.1.

Best regards,
Håkon Hægland
History
Date User Action Args
2017-06-28 15:18:18hakonhaglandsetrecipients: + hakonhagland
2017-06-28 15:18:18hakonhaglandsetmessageid: <1498663098.01.0.2360806195.issue30791@psf.upfronthosting.co.za>
2017-06-28 15:18:17hakonhaglandlinkissue30791 messages
2017-06-28 15:18:17hakonhaglandcreate