Skip to content

Commit d6855c8

Browse files
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 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent bc9bb73 commit d6855c8

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
@@ -440,7 +440,8 @@ def test_theme_create_image(self):
440440

441441
b = ttk.Label(self.root, style='TestWidget')
442442
b.pack(expand=True, fill='both')
443-
self.assertEqual(b.winfo_reqwidth(), 134)
443+
# The exact width varies with the Tk version and display scaling.
444+
self.assertGreater(b.winfo_reqwidth(), 130)
444445
self.assertEqual(b.winfo_reqheight(), 100)
445446

446447
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
@@ -1500,8 +1500,13 @@ def test_configure_height(self):
15001500

15011501
def test_configure_selectmode(self):
15021502
widget = self.create()
1503-
self.checkEnumParam(widget, 'selectmode',
1504-
'none', 'browse', 'extended')
1503+
if tk_version >= (9, 1):
1504+
self.checkEnumParam(widget, 'selectmode',
1505+
'none', 'single', 'browse', 'extended',
1506+
'multiple')
1507+
else:
1508+
self.checkEnumParam(widget, 'selectmode',
1509+
'none', 'browse', 'extended')
15051510

15061511
@requires_tk(8, 7)
15071512
def test_configure_selecttype(self):
@@ -1784,6 +1789,9 @@ def simulate_heading_click(x, y):
17841789
commands = self.tv.master._tclCommands
17851790
self.tv.heading('#0', command=str(self.tv.heading('#0', command=None)))
17861791
self.assertEqual(commands, self.tv.master._tclCommands)
1792+
# Click elsewhere first, so the second heading click is not reported
1793+
# as a double click (which does not invoke the command).
1794+
simulate_mouse_click(self.tv, 5, 50)
17871795
simulate_heading_click(5, 5)
17881796
if not success:
17891797
self.fail("The command associated to the treeview heading wasn't "
@@ -1892,10 +1900,11 @@ def test_insert_item(self):
18921900
value)
18931901

18941902
# test for values which are not None
1903+
keep_type = self.wantobjects and tk_version >= (9, 1)
18951904
itemid = self.tv.insert('', 'end', 0)
1896-
self.assertEqual(itemid, '0')
1905+
self.assertEqual(itemid, 0 if keep_type else '0')
18971906
itemid = self.tv.insert('', 'end', 0.0)
1898-
self.assertEqual(itemid, '0.0')
1907+
self.assertEqual(itemid, 0.0 if keep_type else '0.0')
18991908
# this is because False resolves to 0 and element with 0 iid is already present
19001909
self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', False)
19011910
self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', '')
@@ -1955,7 +1964,10 @@ def test_selection(self):
19551964

19561965
self.tv.insert('', 'end', id=b'bytes\xe2\x82\xac')
19571966
self.tv.selection_set(b'bytes\xe2\x82\xac')
1958-
self.assertEqual(self.tv.selection(), ('bytes\xe2\x82\xac',))
1967+
self.assertEqual(self.tv.selection(),
1968+
(b'bytes\xe2\x82\xac',)
1969+
if self.wantobjects and tk_version >= (9, 1)
1970+
else ('bytes\xe2\x82\xac',))
19591971

19601972
self.tv.selection_set()
19611973
self.assertEqual(self.tv.selection(), ())
@@ -2004,14 +2016,19 @@ def test_virtual_events(self):
20042016
def test_set(self):
20052017
self.tv['columns'] = ['A', 'B']
20062018
item = self.tv.insert('', 'end', values=['a', 'b'])
2007-
self.assertEqual(self.tv.set(item), {'A': 'a', 'B': 'b'})
2019+
values = self.tv.set(item)
2020+
if tk_version >= (9, 1):
2021+
self.assertEqual(values.pop('#0'), '')
2022+
self.assertEqual(values, {'A': 'a', 'B': 'b'})
20082023

20092024
self.tv.set(item, 'B', 'a')
20102025
self.assertEqual(self.tv.item(item, values=None),
20112026
('a', 'a') if self.wantobjects else 'a a')
20122027

20132028
self.tv['columns'] = ['B']
2014-
self.assertEqual(self.tv.set(item), {'B': 'a'})
2029+
values = self.tv.set(item)
2030+
values.pop('#0', None)
2031+
self.assertEqual(values, {'B': 'a'})
20152032

20162033
self.tv.set(item, 'B', 'b')
20172034
self.assertEqual(self.tv.set(item, column='B'), 'b')
@@ -2023,7 +2040,9 @@ def test_set(self):
20232040
123 if self.wantobjects else '123')
20242041
self.assertEqual(self.tv.item(item, values=None),
20252042
(123, 'a') if self.wantobjects else '123 a')
2026-
self.assertEqual(self.tv.set(item),
2043+
values = self.tv.set(item)
2044+
values.pop('#0', None)
2045+
self.assertEqual(values,
20272046
{'B': 123} if self.wantobjects else {'B': '123'})
20282047

20292048
# inexistent column

0 commit comments

Comments
 (0)