classification
Title: Tkinter Tk args and Gnome Shell application name
Type: behavior Stage: patch review
Components: Documentation, Tkinter Versions: Python 3.8, Python 3.7, Python 3.6
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: docs@python Nosy List: docs@python, roger.serwy, serhiy.storchaka, terry.reedy, th9, zup
Priority: normal Keywords: patch

Created on 2011-12-08 01:12 by th9, last changed 2018-02-02 22:13 by terry.reedy.

Files
File name Uploaded Description Edit
tk_wm_test.py th9, 2011-12-08 01:12
Pull Requests
URL Status Linked Edit
PR 4786 open cheryl.sabella, 2017-12-11 00:15
Messages (7)
msg149013 - (view) Author: (th9) Date: 2011-12-08 01:12
I want the app name to be displayed under the icon in Alt+Tab menu, but currently it only displays the className of the root, which by default is "Tk". So in Gnome3 all Tkinter apps show up as "Tk" in the panel and in the Alt+Tab menu.

It is possible to override that to some extent by giving className attribute to Tk(), but I don't know what the side effects are and it doesn't preserve capitalization of the name - the first letter is capital, but all others are small. Moreover, default title of the window is taken from the className by making first letter small and leaving the rest as given, so at the end nothing is as intended.

E.g., if I give calssName="APP", the app is called "App", but windows title is "aPP".

There should be a way to give this information, but I don't see it exposed anywhere and it is not correctly inferred from args[0] either.

Example program attached.
msg149768 - (view) Author: (zup) Date: 2011-12-18 15:40
The link below suggests that the problem with method 'iconname'
may be due to the method not working at the window manager level:

http://www.pythonware.com/library/tkinter/introduction/x9905-icon-methods.htm

summary:

iconname

iconname(newName=None), iconname(). Set (get) the icon name to use when this window is iconified. This method are ignored by some window managers (including Windows).
msg149980 - (view) Author: (th9) Date: 2011-12-21 10:26
Yes, I'm aware of the 'iconname' docs. In this case 'iconname' probably is not the right property to set, but I don't know which one should be.

For GTK+ applications there is a special function for setting application name which should be shown to user and apparently Gnome 3 is using that. 

http://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html#g-set-application-name

I don't know how to achieve the same for Tkinter.
msg150055 - (view) Author: Roger Serwy (roger.serwy) * (Python committer) Date: 2011-12-22 00:00
Does IDLE appear as "Tk" in Gnome3?
msg150070 - (view) Author: (th9) Date: 2011-12-22 04:07
No, it apears as "Toplevel".

I'm not sure if the program.desktop file has something to do with that, but I didn't manage to get the application name from a desktop file to get used for Tkinter program. And I don't have any Tkinter or Tk app which would do what I'm trying to do.

For example, Firefox shows up as "Mozilla Firefox", but I don't see any X property with that value for Firefox window.. it might be something Mutter is doing.

Here is xprop for IDLE and Firefox:
$ sleep 5; xprop 
XKLAVIER_STATE(INTEGER) = 0, 0
WM_STATE(WM_STATE):
		window state: Normal
		icon window: 0x0
_NET_FRAME_EXTENTS(CARDINAL) = 1, 1, 23, 2
_NET_WM_DESKTOP(CARDINAL) = 0
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW
_NET_WM_STATE(ATOM) = 
WM_NORMAL_HINTS(WM_SIZE_HINTS):
		program specified minimum size: 1 by 1
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW
WM_HINTS(WM_HINTS):
		Client accepts input or input focus: True
		Initial state is Normal State.
_NET_WM_ICON_NAME(UTF8_STRING) = "Python Shell"
WM_ICON_NAME(STRING) = "Python Shell"
_NET_WM_NAME(UTF8_STRING) = "Python Shell"
WM_NAME(STRING) = "Python Shell"
WM_CLASS(STRING) = "42772672", "Toplevel"

$ sleep 5; xprop 
XKLAVIER_STATE(INTEGER) = 0, 0
WM_STATE(WM_STATE):
		window state: Normal
		icon window: 0x0
_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 24, 0
_NET_WM_DESKTOP(CARDINAL) = 0
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW
_NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_MAXIMIZED_VERT
WM_HINTS(WM_HINTS):
		Client accepts input or input focus: True
		Initial state is Normal State.
		bitmap id # to use for icon: 0x1600094
		bitmap id # of mask for icon: 0x1600095
		window id # of group leader: 0x1600001
_NET_STARTUP_ID(UTF8_STRING) = "gnome-shell-17731-RD-OC-firefox-10_TIME71936264"
WM_WINDOW_ROLE(STRING) = "browser"
XdndAware(ATOM) = BITMAP
_MOTIF_DRAG_RECEIVER_INFO(_MOTIF_DRAG_RECEIVER_INFO) = 0x6c, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0
_NET_WM_ICON(CARDINAL) = 	Icon (16 x 16):
	 ░   ░▒▒▒▒░     
	 ▒▒░▒▒▒  ░▒▒▒   
	░▒░▒▒░▒  ░░▒░▒  
	░░░░░░▒▒▓░░▒░░▒ 
	▒░░░░░▒▒▓░░▒░ ░░
	▒░░░░░░▒░░░▒▒ ░░
	▒░░░░░░▒░▒▒▒▒ ░▒
	▒░░▒▒▒▒▓▒▒▒▒▒ ░▒
	▒░░░▒▒▓▒▒▒▒▒▒ ░▒
	░▒░░▒▒▒▒▒▒▓▓░░░░
	 ▒▒░░▒▒▒▒▓▒░░░▒░
	 ▒▒░░░░▒▒▒▒░░▒▒ 
	  ▒▒░░░░░░░░░▒  
	   ▒▒▒▒▒▒▒▒▒▒░  
	    ▒▒▒▒▒▒▒▒░   
	     ░░▒▒░░     

	Icon (32 x 32):
	            ░▒▒▒▓▒▒▒░           
	          ▒▒▒░     ░▒▒▒         
	        ░▓▒░         ░▒▒░       
	    ░  ▒▓▒░           ▒▒▒▒░     
	   ▒▒░▒▓▒▒░░░░        ░▒▒░▒░    
	   ▓▒▒▓▒▒▒▒▒▓░       ░░░▒▒ ▒▒   
	   ▓▒░░░░░▒▒▒░     ░░░░▒░░░ ▒▒  
	  ░▒░░░░░▒▒▓▒       ░░░░▓░  ░▒░ 
	  ▒▒░▒▒▒▒▒▒▒▒░░░     ░░░▒▒  ░░▒ 
	 ░▒░▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░▒▒▓░   ▒ 
	 ▒▒░▒▒▒▒▒▒▒▒░ ░▒░░░░░░░▒▒▓▒   ▒░
	 ▒▒▒▒▒▒▒▒▒▒░░▒▒▒░░░░▒▒▒▒▒▒▒░  ▒▒
	 ▓░▒▒▒▒▒▒▒░░░▒░░░░▒▒▒▒▒▒▓░▒░  ▒▓
	 ▓░▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▓▒    ▒▓
	 ▓░▒▒▒▒▒▒▓▓▓▓▒▒▒▒▒▒▒▒▓▓▓▓▒    ▒▓
	░▓▒▒▒▒▒▒▓▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▒ ░ ░▒▓
	 ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▒ ░ ░░▒
	 ▒▒▒▒▒▒▒▒▒▒░░▒▒▒░░ ░▓▓▓▓▒░ ░░░░▒
	 ░▒▒▒▒▒▒▒▒▒▒░░░░░▒▒▒▓▓▓▓░░░░░░▒░
	  ▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓░░░░░░▒ 
	  ▒▓▒▒▒▒▒▒░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░▒▒ 
	  ░▓▓▓▒▒▒▒░░░▒▓▓▓▓▓▓▓▓▒░░░░░▒▓░ 
	   ▒▓▓▓▒▒▒▒░░░░▒▓▓▓▓▒░░░░░▒▒▓▒  
	    ▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░▒░  
	    ░▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒░   
	     ▒▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒    
	      ▒▓▓▓▓▒▒▒▒▒▒▒░░░░░▒▒▒▒     
	      ░▒▓▓▓▓▒▒▒▒▒▒▒▒░░░▒▒▒░     
	       ░▒▒▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒░░     
	        ░░▒▒▒▓▓▓▓▓▓▒▒▒▒░░       
	          ░░▒▒▒▒▒▒▒▒▒░░         
	                                

	Icon (48 x 48):
	                  ░▒▒▓▓▓▓▓▒▒░                   
	               ░▒▓▓▒░░    ░░▒▓▒░                
	             ▒▓▓▒             ▒▓▓▒              
	           ░▓▓▒░               ░░▒▓░            
	          ▒▓▓▒░                ░░ ░▓▒           
	    ░░  ░▓▓▓▒▒░░                ░▒  ▒▓░         
	    ▒░ ░▓▓▓▒▒░░░░░░             ░░▒░ ░▒▒        
	   ░░░░▓▓▓▓▒▒▒░▒▒▒░            ░░░▒▒░  ▒▒       
	   ▒░▒▒▒▓▒▒▒▒▒▒▒▒░             ░░▒░░▒   ▒▒      
	   ▒▒▒▒░░░░░░▒▒▒▒░          ░░░░░▒▒░ ░   ▒░     
	   ▒▒▒░░▒▒▒░▒▒▒▒▒░          ░░░░░░▒▒     ░▒     
	   ▒░░░▒▒▒▒▒▒▒▒▒▒░           ░░░░░░▒▒     ▒░    
	   ▒░▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░         ░░░░▒▓░  ░ ░     
	   ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒      ░░░░░░▒▒▒   ░      
	  ░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░░░░░░░░░░▒▒▒▒▓          
	  ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒░   ░▒░░░░░░░░░░▒▒▒▒▓░         
	 ░░▒▒▒▒▒▒▒▒▒▒▒▒░░   ▒▒▒░░░░░▒▒▒░░▒▒▒▒▓░     ░   
	 ░░▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒░░░░░░░▒▒▒▒▒▒▒▓▒▒▒░░   ░░  
	 ░░▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒░░░░░░▒▒▒▒▒▒▒▒▒▓▒ ▒ ░░  ░▒░ 
	 ░▒▒▒▒▒▒▒▒▒▒░░░░░░▒░░░░░░▒▒▒▒▒▒▒▒▒▒▓▒   ░░  ░▒▒ 
	 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓    ░  ░▓▒ 
	 ░▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓       ░▓▒ 
	 ▒▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓   ░   ▒▒░ 
	░▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓░  ░  ░▒░░ 
	░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓░ ░░ ░░░░░ 
	░▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▒░░░░▒▒▓▓▓▓▓▓▒▒░  ░░░░░░  
	 ▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒░░░░░  ▒▒▓▓▓▓▓▒░░  ░░░░░░  
	 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░▒▒▒░▒▓▓▓▓▓▓░░░ ░░░░░░░  
	 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒▒▓▓▓▓▓▓▓▓▓░░░░░░░░░▒   
	  ▒▒▓▒▒▒▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒░   
	  ░▒▓▒▒▒▒▒▒▒▒▒▒░▒▒▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░▒░   
	   ▒▓▓▒▒▒▒▒▒▒░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▒░   
	   ▒▒▓▓▓▒▒▒▒▒▒░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▒▒░░░░░░░░░▒▒    
	    ▒▓▓▓▒▒▒▒▒▒▒░░░░░░▒▓▓▓▓▓▓▓▒░░░░░░░░░░░▒▓░    
	    ▒▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒▒░░░░░░░░░░░▒▒▒░     
	     ▒▓▓▓▓▒▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒░░░░░░░▒▒░░      
	     ░▒▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░░░░░░░░      
	      ░▒▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░       
	       ░▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░        
	        ░▒▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░         
	         ░▒▒▓▓▓▓▒▒▒▒▒▒▒▒▒░░░░░░░░░▒▒▒▒          
	         ░░▒▒▒▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░         
	         ░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒▒▒▒░░          
	          ░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░▒▒▒░░           
	            ░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░            
	              ░░░░▒▒▒▒▒▒▒▒▒▒░░░░░               
	                  ░░░░░░░░░░░                   
	                                                


_NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 23068819
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
_NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0x1600092
WM_CLIENT_LEADER(WINDOW): window id # 0x1600001
_NET_WM_PID(CARDINAL) = 24976
WM_LOCALE_NAME(STRING) = "lv_LV.utf8"
WM_CLIENT_MACHINE(STRING) = "RD-OC"
WM_NORMAL_HINTS(WM_SIZE_HINTS):
		program specified minimum size: 0 by 0
		window gravity: NorthWest
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST
WM_CLASS(STRING) = "Navigator", "Firefox"
WM_ICON_NAME(STRING) = "Issue 13553: Tkinter doesn't set proper application name - Python tracker - Mozilla Firefox"
_NET_WM_ICON_NAME(UTF8_STRING) = "Issue 13553: Tkinter doesn't set proper application name - Python tracker - Mozilla Firefox"
WM_NAME(STRING) = "Issue 13553: Tkinter doesn't set proper application name - Python tracker - Mozilla Firefox"
_NET_WM_NAME(UTF8_STRING) = "Issue 13553: Tkinter doesn't set proper application name - Python tracker - Mozilla Firefox"
msg166948 - (view) Author: Roger Serwy (roger.serwy) * (Python committer) Date: 2012-07-31 02:30
It looks like this code will set the title properly in the latest GNOME shell (3.4):


    from Tkinter import *
    app = Tk(className='App Name')
    app.title('App Title')
    app.mainloop()


The documentation should be updated to explain the arguments to Tk().
msg224883 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2014-08-05 20:23
The resolution of this issue should be to properly document the Tk class. The 3.4 docs currently say:

"class tkinter.Tk(screenName=None, baseName=None, className='Tk', useTk=1)
    The Tk class is instantiated without arguments. This creates a toplevel widget of Tk which usually is the main window of an application. Each instance has its own associated Tcl interpreter."

The signature is incomplete -- see below. The first sentence is wrong; there are arguments, they just all happen to have defaults. The next sentence should be something like "Return a toplevel Tk widget, which is usually the main window of an application."

Tk.__doc__ is 'Toplevel widget of Tk which represents mostly the main window\n    of an application. It has an associated Tcl interpreter.'  This is probably ok.

Tk.__init__ signature and Tk,__init__.__doc__ are

__init__(self, screenName=None, baseName=None, className='Tk', useTk=1, sync=0, use=None)

"Return a new Toplevel widget on screen SCREENNAME. A new Tcl interpreter will
be created. BASENAME will be used for the identification of the profile file (see
readprofile).
It is constructed from sys.argv[0] without extensions if None is given. CLASSNAME
is the name of the widget class."

"Toplevel" should be "toplevel" as in : Tk is not a subclass of Toplevel. Rather Toplevel is similar to Tk but with the BaseWidget signature.

The argument list needs to be completed and perhaps a bit more said about the one documented. Does 'screen' apply to anything other than X11? Could it be used on Windows to put the window on a secondary screen? Is Gnome the only user framework that uses classname?
History
Date User Action Args
2018-02-02 22:13:29terry.reedysetversions: + Python 3.6, Python 3.8
2017-12-11 00:16:47cheryl.sabellasetversions: + Python 3.7, - Python 2.7, Python 3.4, Python 3.5
2017-12-11 00:15:57cheryl.sabellasetkeywords: + patch
stage: needs patch -> patch review
pull_requests: + pull_request4687
2014-08-05 20:23:40terry.reedysetassignee: docs@python

components: + Documentation
title: Tkinter doesn't set proper application name in Gnome Shell -> Tkinter Tk args and Gnome Shell application name
nosy: + terry.reedy, serhiy.storchaka, docs@python
versions: + Python 3.4, Python 3.5, - Python 3.2
messages: + msg224883
stage: needs patch
2012-07-31 02:30:25roger.serwysetmessages: + msg166948
title: Tkinter doesn't set proper application name -> Tkinter doesn't set proper application name in Gnome Shell
2011-12-22 04:07:12th9setmessages: + msg150070
2011-12-22 00:00:42roger.serwysetnosy: + roger.serwy
messages: + msg150055
2011-12-21 10:26:40th9setmessages: + msg149980
2011-12-18 15:40:26zupsetnosy: + zup
messages: + msg149768
2011-12-08 01:12:08th9create