gh-116484: Fix collisions between Checkbutton and ttk.Checkbutton default names (GH-116495)

Change automatically generated tkinter.Checkbutton widget names to
avoid collisions with automatically generated tkinter.ttk.Checkbutton
widget names within the same parent widget.
This commit is contained in:
Serhiy Storchaka 2024-03-16 13:31:19 +02:00 committed by GitHub
parent 1069a462f6
commit c61cb507c1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 30 additions and 2 deletions

View file

@ -3166,11 +3166,16 @@ class Checkbutton(Widget):
Widget.__init__(self, master, 'checkbutton', cnf, kw)
def _setup(self, master, cnf):
# Because Checkbutton defaults to a variable with the same name as
# the widget, Checkbutton default names must be globally unique,
# not just unique within the parent widget.
if not cnf.get('name'):
global _checkbutton_count
name = self.__class__.__name__.lower()
_checkbutton_count += 1
cnf['name'] = f'!{name}{_checkbutton_count}'
# To avoid collisions with ttk.Checkbutton, use the different
# name template.
cnf['name'] = f'!{name}-{_checkbutton_count}'
super()._setup(master, cnf)
def deselect(self):