diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-06-14 09:33:31 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-06-14 09:33:31 (GMT) |
commit | 8e6d09c1ccb5fed0d1b074aae9325f41fed4705d (patch) | |
tree | 9f0249d040eeac4bbdd3c218ae2d90f7104cd8ea | |
parent | 6afbc653a7bba73ecc56a6ba37632d25376dbe2f (diff) | |
download | cpython-8e6d09c1ccb5fed0d1b074aae9325f41fed4705d.zip cpython-8e6d09c1ccb5fed0d1b074aae9325f41fed4705d.tar.gz cpython-8e6d09c1ccb5fed0d1b074aae9325f41fed4705d.tar.bz2 |
Issue #26386: Fixed ttk.TreeView selection operations with item id's
containing spaces.
-rw-r--r-- | Lib/tkinter/test/test_ttk/test_widgets.py | 51 | ||||
-rw-r--r-- | Lib/tkinter/ttk.py | 4 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 57 insertions, 1 deletions
diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py index c031351..8bd22d0 100644 --- a/Lib/tkinter/test/test_ttk/test_widgets.py +++ b/Lib/tkinter/test/test_ttk/test_widgets.py @@ -1486,6 +1486,57 @@ class TreeviewTest(AbstractWidgetTest, unittest.TestCase): value) + def test_selection(self): + # item 'none' doesn't exist + self.assertRaises(tkinter.TclError, self.tv.selection_set, 'none') + self.assertRaises(tkinter.TclError, self.tv.selection_add, 'none') + self.assertRaises(tkinter.TclError, self.tv.selection_remove, 'none') + self.assertRaises(tkinter.TclError, self.tv.selection_toggle, 'none') + + item1 = self.tv.insert('', 'end') + item2 = self.tv.insert('', 'end') + c1 = self.tv.insert(item1, 'end') + c2 = self.tv.insert(item1, 'end') + c3 = self.tv.insert(item1, 'end') + self.assertEqual(self.tv.selection(), ()) + + self.tv.selection_set((c1, item2)) + self.assertEqual(self.tv.selection(), (c1, item2)) + self.tv.selection_set(c2) + self.assertEqual(self.tv.selection(), (c2,)) + + self.tv.selection_add((c1, item2)) + self.assertEqual(self.tv.selection(), (c1, c2, item2)) + self.tv.selection_add(item1) + self.assertEqual(self.tv.selection(), (item1, c1, c2, item2)) + + self.tv.selection_remove((item1, c3)) + self.assertEqual(self.tv.selection(), (c1, c2, item2)) + self.tv.selection_remove(c2) + self.assertEqual(self.tv.selection(), (c1, item2)) + + self.tv.selection_toggle((c1, c3)) + self.assertEqual(self.tv.selection(), (c3, item2)) + self.tv.selection_toggle(item2) + self.assertEqual(self.tv.selection(), (c3,)) + + self.tv.insert('', 'end', id='with spaces') + self.tv.selection_set('with spaces') + self.assertEqual(self.tv.selection(), ('with spaces',)) + + self.tv.insert('', 'end', id='{brace') + self.tv.selection_set('{brace') + self.assertEqual(self.tv.selection(), ('{brace',)) + + self.tv.insert('', 'end', id='unicode\u20ac') + self.tv.selection_set('unicode\u20ac') + self.assertEqual(self.tv.selection(), ('unicode\u20ac',)) + + self.tv.insert('', 'end', id=b'bytes\xe2\x82\xac') + self.tv.selection_set(b'bytes\xe2\x82\xac') + self.assertEqual(self.tv.selection(), ('bytes\xe2\x82\xac',)) + + def test_set(self): self.tv['columns'] = ['A', 'B'] item = self.tv.insert('', 'end', values=['a', 'b']) diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index 8f9369b..0e5759d 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -1392,7 +1392,9 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): def selection(self, selop=None, items=None): """If selop is not specified, returns selected items.""" - return self.tk.call(self._w, "selection", selop, items) + if isinstance(items, (str, bytes)): + items = (items,) + return self.tk.splitlist(self.tk.call(self._w, "selection", selop, items)) def selection_set(self, items): @@ -13,6 +13,9 @@ Core and Builtins Library ------- +- Issue #26386: Fixed ttk.TreeView selection operations with item id's + containing spaces. + - Issue #22636: Avoid shell injection problems with ctypes.util.find_library(). |