From: Serhiy Storchaka Date: Tue, 14 Jun 2016 09:46:14 +0000 (+0300) Subject: Issue #26386: Fixed ttk.TreeView selection operations with item id's X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d8b5942f7cce0743e1ac522a1aa9475272d4506f;p=python Issue #26386: Fixed ttk.TreeView selection operations with item id's containing spaces. --- diff --git a/Lib/lib-tk/test/test_ttk/test_widgets.py b/Lib/lib-tk/test/test_ttk/test_widgets.py index f874a9c04c..a84960d241 100644 --- a/Lib/lib-tk/test/test_ttk/test_widgets.py +++ b/Lib/lib-tk/test/test_ttk/test_widgets.py @@ -2,7 +2,7 @@ import unittest import Tkinter as tkinter from Tkinter import TclError import ttk -from test.test_support import requires, run_unittest +from test.test_support import requires, run_unittest, have_unicode, u import sys from test_functions import MockTclObj @@ -1486,6 +1486,60 @@ 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',)) + + if have_unicode: + self.tv.insert('', 'end', id=u(r'unicode\u20ac')) + self.tv.selection_set(u(r'unicode\u20ac')) + self.assertEqual(self.tv.selection(), (u(r'unicode\u20ac'),)) + + self.tv.insert('', 'end', id='bytes\xe2\x82\xac') + self.tv.selection_set('bytes\xe2\x82\xac') + self.assertEqual(self.tv.selection(), + (u(r'bytes\u20ac') if have_unicode else + 'bytes\xe2\x82\xac',)) + + def test_set(self): self.tv['columns'] = ['A', 'B'] item = self.tv.insert('', 'end', values=['a', 'b']) @@ -1612,5 +1666,9 @@ tests_gui = ( SizegripTest, TreeviewTest, WidgetTest, ) +tests_gui = ( + TreeviewTest, + ) + if __name__ == "__main__": run_unittest(*tests_gui) diff --git a/Lib/lib-tk/ttk.py b/Lib/lib-tk/ttk.py index f7d04331fb..3f6f79b91a 100644 --- a/Lib/lib-tk/ttk.py +++ b/Lib/lib-tk/ttk.py @@ -1394,7 +1394,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, basestring): + items = (items,) + return self.tk.splitlist(self.tk.call(self._w, "selection", selop, items)) def selection_set(self, items): diff --git a/Misc/NEWS b/Misc/NEWS index b7785e5e41..6e9f5c6ce5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,9 @@ Core and Builtins Library ------- +- Issue #26386: Fixed ttk.TreeView selection operations with item id's + containing spaces. + - Issue #25455: Fixed a crash in repr of cElementTree.Element with recursive tag. Documentation