Skip to content

Commit 467fab9

Browse files
miss-islingtonserhiy-storchakaclaude
authored
[3.14] gh-153380: Adapt ttk tests to Tk 9.1 changes (GH-153381) (GH-153387)
- 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 6f931c9 commit 467fab9

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

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

426427
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
@@ -1504,8 +1504,13 @@ def test_configure_height(self):
15041504

15051505
def test_configure_selectmode(self):
15061506
widget = self.create()
1507-
self.checkEnumParam(widget, 'selectmode',
1508-
'none', 'browse', 'extended')
1507+
if tk_version >= (9, 1):
1508+
self.checkEnumParam(widget, 'selectmode',
1509+
'none', 'single', 'browse', 'extended',
1510+
'multiple')
1511+
else:
1512+
self.checkEnumParam(widget, 'selectmode',
1513+
'none', 'browse', 'extended')
15091514

15101515
@requires_tk(8, 7)
15111516
def test_configure_selecttype(self):
@@ -1788,6 +1793,9 @@ def simulate_heading_click(x, y):
17881793
commands = self.tv.master._tclCommands
17891794
self.tv.heading('#0', command=str(self.tv.heading('#0', command=None)))
17901795
self.assertEqual(commands, self.tv.master._tclCommands)
1796+
# Click elsewhere first, so the second heading click is not reported
1797+
# as a double click (which does not invoke the command).
1798+
simulate_mouse_click(self.tv, 5, 50)
17911799
simulate_heading_click(5, 5)
17921800
if not success:
17931801
self.fail("The command associated to the treeview heading wasn't "
@@ -1896,10 +1904,11 @@ def test_insert_item(self):
18961904
value)
18971905

18981906
# test for values which are not None
1907+
keep_type = self.wantobjects and tk_version >= (9, 1)
18991908
itemid = self.tv.insert('', 'end', 0)
1900-
self.assertEqual(itemid, '0')
1909+
self.assertEqual(itemid, 0 if keep_type else '0')
19011910
itemid = self.tv.insert('', 'end', 0.0)
1902-
self.assertEqual(itemid, '0.0')
1911+
self.assertEqual(itemid, 0.0 if keep_type else '0.0')
19031912
# this is because False resolves to 0 and element with 0 iid is already present
19041913
self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', False)
19051914
self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', '')
@@ -1959,7 +1968,10 @@ def test_selection(self):
19591968

19601969
self.tv.insert('', 'end', id=b'bytes\xe2\x82\xac')
19611970
self.tv.selection_set(b'bytes\xe2\x82\xac')
1962-
self.assertEqual(self.tv.selection(), ('bytes\xe2\x82\xac',))
1971+
self.assertEqual(self.tv.selection(),
1972+
(b'bytes\xe2\x82\xac',)
1973+
if self.wantobjects and tk_version >= (9, 1)
1974+
else ('bytes\xe2\x82\xac',))
19631975

19641976
self.tv.selection_set()
19651977
self.assertEqual(self.tv.selection(), ())
@@ -2008,14 +2020,19 @@ def test_virtual_events(self):
20082020
def test_set(self):
20092021
self.tv['columns'] = ['A', 'B']
20102022
item = self.tv.insert('', 'end', values=['a', 'b'])
2011-
self.assertEqual(self.tv.set(item), {'A': 'a', 'B': 'b'})
2023+
values = self.tv.set(item)
2024+
if tk_version >= (9, 1):
2025+
self.assertEqual(values.pop('#0'), '')
2026+
self.assertEqual(values, {'A': 'a', 'B': 'b'})
20122027

20132028
self.tv.set(item, 'B', 'a')
20142029
self.assertEqual(self.tv.item(item, values=None),
20152030
('a', 'a') if self.wantobjects else 'a a')
20162031

20172032
self.tv['columns'] = ['B']
2018-
self.assertEqual(self.tv.set(item), {'B': 'a'})
2033+
values = self.tv.set(item)
2034+
values.pop('#0', None)
2035+
self.assertEqual(values, {'B': 'a'})
20192036

20202037
self.tv.set(item, 'B', 'b')
20212038
self.assertEqual(self.tv.set(item, column='B'), 'b')
@@ -2027,7 +2044,9 @@ def test_set(self):
20272044
123 if self.wantobjects else '123')
20282045
self.assertEqual(self.tv.item(item, values=None),
20292046
(123, 'a') if self.wantobjects else '123 a')
2030-
self.assertEqual(self.tv.set(item),
2047+
values = self.tv.set(item)
2048+
values.pop('#0', None)
2049+
self.assertEqual(values,
20312050
{'B': 123} if self.wantobjects else {'B': '123'})
20322051

20332052
# inexistent column

0 commit comments

Comments
 (0)