Skip to content

Commit 2a07de4

Browse files
serhiy-storchakaclaude
authored andcommitted
gh-153380: Adapt ttk tests to Tk 9.1 changes (GH-153381)
- selectmode: new 'single' and 'multiple' modes - set(): includes the tree column '#0' - insert()/selection(): item ids keep the passed value's type - heading_callback: avoid a double click on the second click - theme_create_image: don't assert the exact (now scaled) width (cherry picked from commit d6855c8) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 89e2a5e commit 2a07de4

2 files changed

Lines changed: 29 additions & 9 deletions

File tree

Lib/test/test_ttk/test_style.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,8 @@ def test_theme_create_image(self):
419419

420420
b = ttk.Label(self.root, style='TestWidget')
421421
b.pack(expand=True, fill='both')
422-
self.assertEqual(b.winfo_reqwidth(), 134)
422+
# The exact width varies with the Tk version and display scaling.
423+
self.assertGreater(b.winfo_reqwidth(), 130)
423424
self.assertEqual(b.winfo_reqheight(), 100)
424425

425426
style.theme_use(curr_theme)

Lib/test/test_ttk/test_widgets.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1465,8 +1465,13 @@ def test_configure_height(self):
14651465

14661466
def test_configure_selectmode(self):
14671467
widget = self.create()
1468-
self.checkEnumParam(widget, 'selectmode',
1469-
'none', 'browse', 'extended')
1468+
if tk_version >= (9, 1):
1469+
self.checkEnumParam(widget, 'selectmode',
1470+
'none', 'single', 'browse', 'extended',
1471+
'multiple')
1472+
else:
1473+
self.checkEnumParam(widget, 'selectmode',
1474+
'none', 'browse', 'extended')
14701475

14711476
@requires_tk(8, 7)
14721477
def test_configure_selecttype(self):
@@ -1749,6 +1754,9 @@ def simulate_heading_click(x, y):
17491754
commands = self.tv.master._tclCommands
17501755
self.tv.heading('#0', command=str(self.tv.heading('#0', command=None)))
17511756
self.assertEqual(commands, self.tv.master._tclCommands)
1757+
# Click elsewhere first, so the second heading click is not reported
1758+
# as a double click (which does not invoke the command).
1759+
simulate_mouse_click(self.tv, 5, 50)
17521760
simulate_heading_click(5, 5)
17531761
if not success:
17541762
self.fail("The command associated to the treeview heading wasn't "
@@ -1857,10 +1865,11 @@ def test_insert_item(self):
18571865
value)
18581866

18591867
# test for values which are not None
1868+
keep_type = self.wantobjects and tk_version >= (9, 1)
18601869
itemid = self.tv.insert('', 'end', 0)
1861-
self.assertEqual(itemid, '0')
1870+
self.assertEqual(itemid, 0 if keep_type else '0')
18621871
itemid = self.tv.insert('', 'end', 0.0)
1863-
self.assertEqual(itemid, '0.0')
1872+
self.assertEqual(itemid, 0.0 if keep_type else '0.0')
18641873
# this is because False resolves to 0 and element with 0 iid is already present
18651874
self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', False)
18661875
self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', '')
@@ -1920,7 +1929,10 @@ def test_selection(self):
19201929

19211930
self.tv.insert('', 'end', id=b'bytes\xe2\x82\xac')
19221931
self.tv.selection_set(b'bytes\xe2\x82\xac')
1923-
self.assertEqual(self.tv.selection(), ('bytes\xe2\x82\xac',))
1932+
self.assertEqual(self.tv.selection(),
1933+
(b'bytes\xe2\x82\xac',)
1934+
if self.wantobjects and tk_version >= (9, 1)
1935+
else ('bytes\xe2\x82\xac',))
19241936

19251937
self.tv.selection_set()
19261938
self.assertEqual(self.tv.selection(), ())
@@ -1969,14 +1981,19 @@ def test_virtual_events(self):
19691981
def test_set(self):
19701982
self.tv['columns'] = ['A', 'B']
19711983
item = self.tv.insert('', 'end', values=['a', 'b'])
1972-
self.assertEqual(self.tv.set(item), {'A': 'a', 'B': 'b'})
1984+
values = self.tv.set(item)
1985+
if tk_version >= (9, 1):
1986+
self.assertEqual(values.pop('#0'), '')
1987+
self.assertEqual(values, {'A': 'a', 'B': 'b'})
19731988

19741989
self.tv.set(item, 'B', 'a')
19751990
self.assertEqual(self.tv.item(item, values=None),
19761991
('a', 'a') if self.wantobjects else 'a a')
19771992

19781993
self.tv['columns'] = ['B']
1979-
self.assertEqual(self.tv.set(item), {'B': 'a'})
1994+
values = self.tv.set(item)
1995+
values.pop('#0', None)
1996+
self.assertEqual(values, {'B': 'a'})
19801997

19811998
self.tv.set(item, 'B', 'b')
19821999
self.assertEqual(self.tv.set(item, column='B'), 'b')
@@ -1988,7 +2005,9 @@ def test_set(self):
19882005
123 if self.wantobjects else '123')
19892006
self.assertEqual(self.tv.item(item, values=None),
19902007
(123, 'a') if self.wantobjects else '123 a')
1991-
self.assertEqual(self.tv.set(item),
2008+
values = self.tv.set(item)
2009+
values.pop('#0', None)
2010+
self.assertEqual(values,
19922011
{'B': 123} if self.wantobjects else {'B': '123'})
19932012

19942013
# inexistent column

0 commit comments

Comments
 (0)