Skip to content

Commit 8e6d09c

Browse files
Issue #26386: Fixed ttk.TreeView selection operations with item id's
containing spaces.
1 parent 6afbc65 commit 8e6d09c

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed

Lib/tkinter/test/test_ttk/test_widgets.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,6 +1486,57 @@ def test_insert_item(self):
14861486
value)
14871487

14881488

1489+
def test_selection(self):
1490+
# item 'none' doesn't exist
1491+
self.assertRaises(tkinter.TclError, self.tv.selection_set, 'none')
1492+
self.assertRaises(tkinter.TclError, self.tv.selection_add, 'none')
1493+
self.assertRaises(tkinter.TclError, self.tv.selection_remove, 'none')
1494+
self.assertRaises(tkinter.TclError, self.tv.selection_toggle, 'none')
1495+
1496+
item1 = self.tv.insert('', 'end')
1497+
item2 = self.tv.insert('', 'end')
1498+
c1 = self.tv.insert(item1, 'end')
1499+
c2 = self.tv.insert(item1, 'end')
1500+
c3 = self.tv.insert(item1, 'end')
1501+
self.assertEqual(self.tv.selection(), ())
1502+
1503+
self.tv.selection_set((c1, item2))
1504+
self.assertEqual(self.tv.selection(), (c1, item2))
1505+
self.tv.selection_set(c2)
1506+
self.assertEqual(self.tv.selection(), (c2,))
1507+
1508+
self.tv.selection_add((c1, item2))
1509+
self.assertEqual(self.tv.selection(), (c1, c2, item2))
1510+
self.tv.selection_add(item1)
1511+
self.assertEqual(self.tv.selection(), (item1, c1, c2, item2))
1512+
1513+
self.tv.selection_remove((item1, c3))
1514+
self.assertEqual(self.tv.selection(), (c1, c2, item2))
1515+
self.tv.selection_remove(c2)
1516+
self.assertEqual(self.tv.selection(), (c1, item2))
1517+
1518+
self.tv.selection_toggle((c1, c3))
1519+
self.assertEqual(self.tv.selection(), (c3, item2))
1520+
self.tv.selection_toggle(item2)
1521+
self.assertEqual(self.tv.selection(), (c3,))
1522+
1523+
self.tv.insert('', 'end', id='with spaces')
1524+
self.tv.selection_set('with spaces')
1525+
self.assertEqual(self.tv.selection(), ('with spaces',))
1526+
1527+
self.tv.insert('', 'end', id='{brace')
1528+
self.tv.selection_set('{brace')
1529+
self.assertEqual(self.tv.selection(), ('{brace',))
1530+
1531+
self.tv.insert('', 'end', id='unicode\u20ac')
1532+
self.tv.selection_set('unicode\u20ac')
1533+
self.assertEqual(self.tv.selection(), ('unicode\u20ac',))
1534+
1535+
self.tv.insert('', 'end', id=b'bytes\xe2\x82\xac')
1536+
self.tv.selection_set(b'bytes\xe2\x82\xac')
1537+
self.assertEqual(self.tv.selection(), ('bytes\xe2\x82\xac',))
1538+
1539+
14891540
def test_set(self):
14901541
self.tv['columns'] = ['A', 'B']
14911542
item = self.tv.insert('', 'end', values=['a', 'b'])

Lib/tkinter/ttk.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,9 @@ def see(self, item):
13921392

13931393
def selection(self, selop=None, items=None):
13941394
"""If selop is not specified, returns selected items."""
1395-
return self.tk.call(self._w, "selection", selop, items)
1395+
if isinstance(items, (str, bytes)):
1396+
items = (items,)
1397+
return self.tk.splitlist(self.tk.call(self._w, "selection", selop, items))
13961398

13971399

13981400
def selection_set(self, items):

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ Core and Builtins
1313
Library
1414
-------
1515

16+
- Issue #26386: Fixed ttk.TreeView selection operations with item id's
17+
containing spaces.
18+
1619
- Issue #22636: Avoid shell injection problems with
1720
ctypes.util.find_library().
1821

0 commit comments

Comments
 (0)