From 97f1ca167385bafd9be5d226f61c33412fc081bf Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 1 Feb 2018 18:49:21 +0200 Subject: [3.8] bpo-31508: Remove support of arguments in tkinter.ttk.Treeview.selection. (GH-3651) It was deprecated in 3.6. --- Doc/library/tkinter.ttk.rst | 11 +++++------ Doc/whatsnew/3.8.rst | 8 ++++++++ Lib/tkinter/test/test_ttk/test_widgets.py | 21 -------------------- Lib/tkinter/ttk.py | 23 ++-------------------- .../2017-09-19-12-38-31.bpo-31508.pDsFJl.rst | 3 +++ 5 files changed, 18 insertions(+), 48 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2017-09-19-12-38-31.bpo-31508.pDsFJl.rst diff --git a/Doc/library/tkinter.ttk.rst b/Doc/library/tkinter.ttk.rst index debbc81..9c0c4cd 100644 --- a/Doc/library/tkinter.ttk.rst +++ b/Doc/library/tkinter.ttk.rst @@ -1094,14 +1094,13 @@ ttk.Treeview the tree. - .. method:: selection(selop=None, items=None) + .. method:: selection() - If *selop* is not specified, returns selected items. Otherwise, it will - act according to the following selection methods. + Returns a tuple of selected items. - .. deprecated-removed:: 3.6 3.8 - Using ``selection()`` for changing the selection state is deprecated. - Use the following selection methods instead. + .. versionchanged:: 3.8 + ``selection()`` no longer takes arguments. For changing the selection + state use the following selection methods. .. method:: selection_set(*items) diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index 59f1883..8a3f9b0 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -113,3 +113,11 @@ This section lists previously described changes and other bugfixes that may require changes to your code. +Changes in the Python API +------------------------- + +* The :meth:`~tkinter.ttk.Treeview.selection` method of the + :class:`tkinter.ttk.Treeview` class no longer takes arguments. Using it with + arguments for changing the selection was deprecated in Python 3.6. Use + specialized methods like :meth:`~tkinter.ttk.Treeview.selection_set` for + changing the selection. (Contributed by Serhiy Storchaka in :issue:`31508`.) diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py index ab0db28..08f5fc3 100644 --- a/Lib/tkinter/test/test_ttk/test_widgets.py +++ b/Lib/tkinter/test/test_ttk/test_widgets.py @@ -1556,27 +1556,6 @@ class TreeviewTest(AbstractWidgetTest, unittest.TestCase): self.tv.selection_toggle((c1, c3)) self.assertEqual(self.tv.selection(), (c3, item2)) - if sys.version_info >= (3, 8): - 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'] diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index e6c90ce..2ab5b59 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -28,8 +28,6 @@ __all__ = ["Button", "Checkbutton", "Combobox", "Entry", "Frame", "Label", import tkinter from tkinter import _flatten, _join, _stringify, _splitdict -_sentinel = object() - # Verify if Tk is new enough to not need the Tile package _REQUIRE_TILE = True if tkinter.TkVersion < 8.5 else False @@ -1396,26 +1394,9 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): self.tk.call(self._w, "see", item) - def selection(self, selop=_sentinel, items=None): + def selection(self): """Returns the tuple of selected items.""" - if selop is _sentinel: - selop = None - elif selop is None: - import warnings - warnings.warn( - "The selop=None argument of selection() is deprecated " - "and will be removed in Python 3.8", - DeprecationWarning, 3) - elif selop in ('set', 'add', 'remove', 'toggle'): - import warnings - warnings.warn( - "The selop argument of selection() is deprecated " - "and will be removed in Python 3.8, " - "use selection_%s() instead" % (selop,), - DeprecationWarning, 3) - else: - raise TypeError('Unsupported operation') - return self.tk.splitlist(self.tk.call(self._w, "selection", selop, items)) + return self.tk.splitlist(self.tk.call(self._w, "selection")) def _selection(self, selop, items): diff --git a/Misc/NEWS.d/next/Library/2017-09-19-12-38-31.bpo-31508.pDsFJl.rst b/Misc/NEWS.d/next/Library/2017-09-19-12-38-31.bpo-31508.pDsFJl.rst new file mode 100644 index 0000000..b3d49ee --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-09-19-12-38-31.bpo-31508.pDsFJl.rst @@ -0,0 +1,3 @@ +Removed support of arguments in `tkinter.ttk.Treeview.selection`. It was +deprecated in 3.6. Use specialized methods like `selection_set` for +changing the selection. -- cgit v0.12