Issue #27319: Methods selection_set(), selection_add(), selection_remove()

and selection_toggle() of ttk.TreeView now allow to pass multiple items as
multiple arguments instead of passing them as a tuple.  Deprecated
undocumented ability of calling the selection() method with arguments.
This commit is contained in:
Serhiy Storchaka 2016-06-20 00:05:40 +03:00
parent 6c85091b5b
commit b84f029baa
3 changed files with 90 additions and 20 deletions

View file

@ -1487,6 +1487,7 @@ class TreeviewTest(AbstractWidgetTest, unittest.TestCase):
def test_selection(self):
self.assertRaises(TypeError, self.tv.selection, 'spam')
# item 'none' doesn't exist
self.assertRaises(tkinter.TclError, self.tv.selection_set, 'none')
self.assertRaises(tkinter.TclError, self.tv.selection_add, 'none')
@ -1500,25 +1501,31 @@ class TreeviewTest(AbstractWidgetTest, unittest.TestCase):
c3 = self.tv.insert(item1, 'end')
self.assertEqual(self.tv.selection(), ())
self.tv.selection_set((c1, item2))
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.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_add()
self.assertEqual(self.tv.selection(), (item1, c1, c2, item2))
self.tv.selection_remove((item1, c3))
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_remove()
self.assertEqual(self.tv.selection(), (c1, item2))
self.tv.selection_toggle((c1, c3))
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.selection_toggle()
self.assertEqual(self.tv.selection(), (c3,))
self.tv.insert('', 'end', id='with spaces')
self.tv.selection_set('with spaces')
@ -1536,6 +1543,40 @@ class TreeviewTest(AbstractWidgetTest, unittest.TestCase):
self.tv.selection_set(b'bytes\xe2\x82\xac')
self.assertEqual(self.tv.selection(), ('bytes\xe2\x82\xac',))
self.tv.selection_set()
self.assertEqual(self.tv.selection(), ())
# Old interface
self.tv.selection_set((c1, item2))
self.assertEqual(self.tv.selection(), (c1, item2))
self.tv.selection_add((c1, item1))
self.assertEqual(self.tv.selection(), (item1, c1, item2))
self.tv.selection_remove((item1, c3))
self.assertEqual(self.tv.selection(), (c1, item2))
self.tv.selection_toggle((c1, c3))
self.assertEqual(self.tv.selection(), (c3, item2))
if sys.version_info >= (3, 7):
import warnings
warnings.warn(
'Deprecated API of Treeview.selection() should be removed')
self.tv.selection_set()
self.assertEqual(self.tv.selection(), ())
with self.assertWarns(DeprecationWarning):
self.tv.selection('set', (c1, item2))
self.assertEqual(self.tv.selection(), (c1, item2))
with self.assertWarns(DeprecationWarning):
self.tv.selection('add', (c1, item1))
self.assertEqual(self.tv.selection(), (item1, c1, item2))
with self.assertWarns(DeprecationWarning):
self.tv.selection('remove', (item1, c3))
self.assertEqual(self.tv.selection(), (c1, item2))
with self.assertWarns(DeprecationWarning):
self.tv.selection('toggle', (c1, c3))
self.assertEqual(self.tv.selection(), (c3, item2))
with self.assertWarns(DeprecationWarning):
selection = self.tv.selection(None)
self.assertEqual(selection, (c3, item2))
def test_set(self):
self.tv['columns'] = ['A', 'B']