]> granicus.if.org Git - python/commitdiff
Issue #26386: Fixed ttk.TreeView selection operations with item id's
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 14 Jun 2016 09:46:14 +0000 (12:46 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Tue, 14 Jun 2016 09:46:14 +0000 (12:46 +0300)
containing spaces.

Lib/lib-tk/test/test_ttk/test_widgets.py
Lib/lib-tk/ttk.py
Misc/NEWS

index f874a9c04c47b627b353a8f820e3a4bffe308d10..a84960d241aa89e052a578cb2a9aa1da777fe3d5 100644 (file)
@@ -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)
index f7d04331fb2763423940fab502ea0d07b513daad..3f6f79b91af81194f332c9e19f2cead378c3875f 100644 (file)
@@ -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):
index b7785e5e415e3d38016459c8d19075cfde91a3e2..6e9f5c6ce5736580fde577af90974a996f36656d 100644 (file)
--- 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