mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
gh-128562: Fix generation of the tkinter widget names (GH-128604)
There were possible conflicts if the widget class name ends with a digit.
This commit is contained in:
parent
402b91da87
commit
da8825ea95
3 changed files with 12 additions and 1 deletions
|
|
@ -31,12 +31,20 @@ def test_repr(self):
|
|||
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):
|
||||
|
|
|
|||
|
|
@ -2741,6 +2741,8 @@ def _setup(self, master, cnf):
|
|||
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
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Fix possible conflicts in generated :mod:`tkinter` widget names if the widget class name ends with a digit.
|
||||
Loading…
Add table
Add a link
Reference in a new issue