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.

classification
Title: Tkinter stacking versus focus behavior on Windows
Type: behavior Stage: resolved
Components: Tkinter Versions: Python 2.7
process
Status: closed Resolution: third party
Dependencies: Superseder:
Assigned To: Nosy List: Eugene K., ned.deily, serhiy.storchaka, terry.reedy
Priority: normal Keywords:

Created on 2015-07-08 01:59 by Eugene K., last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
bug.py Eugene K., 2015-07-11 16:42
tem.py terry.reedy, 2015-07-12 03:02 Grid-based version that works
Messages (7)
msg246445 - (view) Author: Eugene K. (Eugene K.) * Date: 2015-07-08 01:59
I've encountered this while trying to write a program that allowed the user to edit button labels, by creating an Entry widget on top of the  Button, and then hiding the Button. 

Sample code:

http://pastebin.com/WvBbLsNj

According to feedback from stackoverflow, it works as intended on MacOS and Debian. It does not work in Windows (I've tried Windows 7, 8, and Server 2012 R2, with Python versions 2.7.5 to 2.7.9.)

The problem is that the button does not want to stay hidden. E.g. I create an Entry widget and it initially appears on top of the Button. Then, if I click inside the entry box, it briefly disappears (for a second or two), showing the button again, and then reappears. If I hit 'tab' and move focus out of the Entry, it disappears completely (exposing the button again) and only reappears when I click back into the entry/button area.
msg246597 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2015-07-11 08:12
Please attach the file to this issue, using the [Browse] button.
msg246609 - (view) Author: Eugene K. (Eugene K.) * Date: 2015-07-11 16:42
File attached
msg246627 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2015-07-12 03:02
The issue is the interaction between stacking and focus. I am pretty sure that this is not a Python bug and that this issue should be closed.  I suspect that the behavior is not even a tk bug, but simply how Windows' graphics system work.

In any case, the attached file avoids the stacking issue by temporarily replacing a Button with an Entry in a grid. It works on Windows 2 and 3 (the upload file has 'tkinter' for 3.x) and should work anywhere.  I leave it to you to add grid args to position and anchor the widgets better.  Also, the Entry widgets need to be a bit taller to match the Buttons.
msg246632 - (view) Author: Eugene K. (Eugene K.) * Date: 2015-07-12 04:22
It may not be a pure Python bug, but it's definitely at least a tk bug (which makes it a Python bug as long as tk is the canonical UI package in Python.) 

Workarounds are nice, but a workaround fixes my specific problem here and now, while leaving unknown numbers of Python UI developers scratching their heads at the unexpected behavior of their code.

I don't object to closing this bug as long as it's forwarded to tk/tkinter developers first.
msg246672 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2015-07-12 21:23
This tracker is for patches to the CPython repository.  That includes tkinter, but does not include tk.

Ned, you know much more about OS variations in tk behavior than.  What do you think? (See initial post.)  What happens on Mac.  Should we ask Kevin W. about this?
msg246687 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2015-07-13 07:24
As far as I can tell the sample program works as expected on OS X with either Cocoa Tk or X11 Tk, in both cases (as long as the event is changed to Button-1).  I agree it's most likely a platform difference or platform bug in Tk behavior, rather than a Python issue.  But establishing what is the desired Tk behavior on each platform is way beyond the scope of the Python issue tracker.  I suggest you ask in more specialized forums, like the Tkinter-discuss list (https://mail.python.org/mailman/listinfo/tkinter-discuss) or a Tk support group.  If you want to pursue it as a Tk issue, you might want to search the Tk issue tracker (https://core.tcl.tk/tk/reportlist) and/or open a Tk issue there.  You'll probably have more success there if you can provide a Tcl-based test case, for example, using the wish shell, thus eliminating Python from the equation. If it ends up looking to really be a Python issue, please re-open this issue with links to the discussion elsewhere.  Good luck!
History
Date User Action Args
2022-04-11 14:58:18adminsetgithub: 68775
2015-07-13 07:24:32ned.deilysetstatus: open -> closed
resolution: third party
messages: + msg246687

stage: resolved
2015-07-12 21:23:25terry.reedysetnosy: + ned.deily
messages: + msg246672
2015-07-12 04:22:50Eugene K.setmessages: + msg246632
2015-07-12 03:02:21terry.reedysetfiles: + tem.py

messages: + msg246627
title: Incorrect tkinter behavior of slave widgets of Button -> Tkinter stacking versus focus behavior on Windows
2015-07-11 16:42:11Eugene K.setfiles: + bug.py

messages: + msg246609
2015-07-11 08:12:00terry.reedysetnosy: + terry.reedy, serhiy.storchaka
messages: + msg246597
2015-07-08 01:59:40Eugene K.create