Python3.6 tkinter bug?
Terry Reedy
tjreedy at udel.edu
Wed Feb 1 06:55:11 EST 2017
More information about the Python-list mailing list
Wed Feb 1 06:55:11 EST 2017
- Previous message (by thread): Python3.6 tkinter bug?
- Next message (by thread): The use of sys.exc_info for catching exceptions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 2/1/2017 1:37 AM, Christian Gollwitzer wrote: > Am 01.02.17 um 00:02 schrieb MRAB: >> On 2017-01-31 22:34, Christian Gollwitzer wrote: >>>> .!frame.!checkbutton >>>> .!frame.!checkbutton2 >>>> .!frame2.!checkbutton >>>> .!frame2.!checkbutton2 >>> >>> >> Perhaps someone who knows Tcl and tk can tell me, but I notice that in >> the first example, the second part of the widget names are unique, >> whereas in the second example, the second part of the widget names are >> the reused (both "!checkbutton" and "!checkbutton2" occur twice). > > It is indeed the reason, but it has some strange legacy cause: the > default name for the checkbutton-linked variable is the name of the > button inside the parent. Therefore creating a checkbutton has the side > effect of creating a variable with the button's name. > > In this case, the first buttons in the frames are linked to a variable > called "!checkbutton" and the other two are linked to "!checkbutton2". > (a variable name in Tcl can be anything apart from the empty string). > This can also be demonstrated by this Tcl script: > > package require Tk > > pack [frame .f1] > pack [frame .f2] > > pack [checkbutton .f1.c1 -text "A" ] > pack [checkbutton .f1.c2 -text "B" ] > > pack [checkbutton .f2.c1 -text "C" ] > pack [checkbutton .f2.c2 -text "D" ] > > which is equivalent to the Python code above. > > Note that this surprising behaviour was corrected for the (modern) ttk > widgets, so if "checkbutton" is replaced by "ttk::checkbutton", they are > not any longer linked. In Python, that would be > > from tkinter import ttk > ... > w = ttk.Checkbutton() > > (Personally, I'm not using the legacy widgets any longer) Christian, could you repeat any relevant parts of your comments on the tracker, especially any ideas on how we might fix tkinter? https://bugs.python.org/issue29402 >> Do the names need to be: >> >> .!frame.!checkbutton >> .!frame.!checkbutton2 >> .!frame2.!checkbutton3 >> .!frame2.!checkbutton4 Serhiy considered that but, not knowing that this would cause a regression, we both liked numbering within parent better. There is a similar issue with radiobuttons on ttk.OptionMenus that existed *before* the 3.6 name changes. https://bugs.python.org/issue25684 So there seems to be a systematic issue with tk or how we are (mis)using it. > Good question. Maybe there should be unique variable names? I.e., if the > script is changed into package require Tk > > pack [frame .f1] > pack [frame .f2] > > pack [checkbutton .f1.c1 -text "A" -variable v1] > pack [checkbutton .f1.c2 -text "B" -variable v2] > > pack [checkbutton .f2.c1 -text "C" -variable v3] > pack [checkbutton .f2.c2 -text "D" -variable v4] > > then they are also not linked. -- Terry Jan Reedy
- Previous message (by thread): Python3.6 tkinter bug?
- Next message (by thread): The use of sys.exc_info for catching exceptions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list