aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_tkinter/test_misc.py10
-rw-r--r--Lib/tkinter/__init__.py2
-rw-r--r--Misc/NEWS.d/next/Library/2025-01-08-03-09-29.gh-issue-128562.Mlv-yO.rst1
3 files changed, 12 insertions, 1 deletions
diff --git a/Lib/test/test_tkinter/test_misc.py b/Lib/test/test_tkinter/test_misc.py
index 33621693918..96ea3f0117c 100644
--- a/Lib/test/test_tkinter/test_misc.py
+++ b/Lib/test/test_tkinter/test_misc.py
@@ -31,12 +31,20 @@ class MiscTest(AbstractTkTest, unittest.TestCase):
self.assertEqual(repr(f), '<tkinter.Frame object .top.child>')
def test_generated_names(self):
+ class Button2(tkinter.Button):
+ pass
+
t = tkinter.Toplevel(self.root)
f = tkinter.Frame(t)
f2 = tkinter.Frame(t)
+ self.assertNotEqual(str(f), str(f2))
b = tkinter.Button(f2)
- for name in str(b).split('.'):
+ b2 = Button2(f2)
+ for name in str(b).split('.') + str(b2).split('.'):
self.assertFalse(name.isidentifier(), msg=repr(name))
+ b3 = tkinter.Button(f2)
+ b4 = Button2(f2)
+ self.assertEqual(len({str(b), str(b2), str(b3), str(b4)}), 4)
@requires_tk(8, 6, 6)
def test_tk_busy(self):
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index d494c0c9687..0baed8b569e 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -2741,6 +2741,8 @@ class BaseWidget(Misc):
del cnf['name']
if not name:
name = self.__class__.__name__.lower()
+ if name[-1].isdigit():
+ name += "!" # Avoid duplication when calculating names below
if master._last_child_ids is None:
master._last_child_ids = {}
count = master._last_child_ids.get(name, 0) + 1
diff --git a/Misc/NEWS.d/next/Library/2025-01-08-03-09-29.gh-issue-128562.Mlv-yO.rst b/Misc/NEWS.d/next/Library/2025-01-08-03-09-29.gh-issue-128562.Mlv-yO.rst
new file mode 100644
index 00000000000..eb50dded67b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-01-08-03-09-29.gh-issue-128562.Mlv-yO.rst
@@ -0,0 +1 @@
+Fix possible conflicts in generated :mod:`tkinter` widget names if the widget class name ends with a digit.