]> granicus.if.org Git - python/commitdiff
bpo-34829: Add missing selection_ methods to the Tkinter Spinbox. (GH-9617)
authorJuliette Monsel <j4321@users.noreply.github.com>
Mon, 8 Oct 2018 16:29:24 +0000 (18:29 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Mon, 8 Oct 2018 16:29:24 +0000 (19:29 +0300)
Implement the methods selection_from(), selection_range(), selection_present()
and selection_to() for Tkinter Spinbox.

Doc/whatsnew/3.8.rst
Lib/tkinter/__init__.py
Lib/tkinter/test/test_tkinter/test_widgets.py
Misc/ACKS
Misc/NEWS.d/next/Library/2018-10-08-16-04-36.bpo-34829.B7v7D0.rst [new file with mode: 0644]

index a146249178f40d71e40e397de6d90bf98894e071..d9c3f1bd7dd6906613eff557067a715458cf7663 100644 (file)
@@ -167,6 +167,16 @@ Added :attr:`SSLContext.post_handshake_auth` to enable and
 post-handshake authentication.
 (Contributed by Christian Heimes in :issue:`34670`.)
 
+tkinter
+-------
+
+Added methods :meth:`~tkinter.Spinbox.selection_from`,
+:meth:`~tkinter.Spinbox.selection_present`,
+:meth:`~tkinter.Spinbox.selection_range` and
+:meth:`~tkinter.Spinbox.selection_to`
+in the :class:`tkinter.Spinbox` class.
+(Contributed by Juliette Monsel in :issue:`34829`.)
+
 venv
 ----
 
index ff85f837d1d5941c4ae572e64b63ca5140ee5801..25f1ff41e4ee5f72273d5ee1121af39d738d48cc 100644 (file)
@@ -3770,6 +3770,24 @@ class Spinbox(Widget, XView):
         """
         return self.selection("element", element)
 
+    def selection_from(self, index):
+        """Set the fixed end of a selection to INDEX."""
+        self.selection('from', index)
+
+    def selection_present(self):
+        """Return True if there are characters selected in the spinbox, False
+        otherwise."""
+        return self.tk.getboolean(
+            self.tk.call(self._w, 'selection', 'present'))
+
+    def selection_range(self, start, end):
+        """Set the selection from START to END (not included)."""
+        self.selection('range', start, end)
+
+    def selection_to(self, index):
+        """Set the variable end of a selection to INDEX."""
+        self.selection('to', index)
+
 ###########################################################################
 
 class LabelFrame(Widget):
index e4c9d337ba7d2b1652d32281c7cda8fa96449ab4..c068a9de2d77dffd2391cd33b758c6c19b5c7d49 100644 (file)
@@ -377,6 +377,31 @@ class EntryTest(AbstractWidgetTest, unittest.TestCase):
         self.checkCommandParam(widget, 'validatecommand')
         self.checkCommandParam(widget, 'vcmd')
 
+    def test_selection_methods(self):
+        widget = self.create()
+        widget.insert(0, '12345')
+        self.assertFalse(widget.selection_present())
+        widget.selection_range(0, 'end')
+        self.assertEqual(widget.selection_get(), '12345')
+        self.assertTrue(widget.selection_present())
+        widget.selection_from(1)
+        widget.selection_to(2)
+        self.assertEqual(widget.selection_get(), '2')
+        widget.selection_range(3, 4)
+        self.assertEqual(widget.selection_get(), '4')
+        widget.selection_clear()
+        self.assertFalse(widget.selection_present())
+        widget.selection_range(0, 'end')
+        widget.selection_adjust(4)
+        self.assertEqual(widget.selection_get(), '1234')
+        widget.selection_adjust(1)
+        self.assertEqual(widget.selection_get(), '234')
+        widget.selection_adjust(5)
+        self.assertEqual(widget.selection_get(), '2345')
+        widget.selection_adjust(0)
+        self.assertEqual(widget.selection_get(), '12345')
+        widget.selection_adjust(0)
+
 
 @add_standard_options(StandardOptionsTests)
 class SpinboxTest(EntryTest, unittest.TestCase):
@@ -474,6 +499,31 @@ class SpinboxTest(EntryTest, unittest.TestCase):
         self.assertRaises(TypeError, widget.bbox)
         self.assertRaises(TypeError, widget.bbox, 0, 1)
 
+    def test_selection_methods(self):
+        widget = self.create()
+        widget.insert(0, '12345')
+        self.assertFalse(widget.selection_present())
+        widget.selection_range(0, 'end')
+        self.assertEqual(widget.selection_get(), '12345')
+        self.assertTrue(widget.selection_present())
+        widget.selection_from(1)
+        widget.selection_to(2)
+        self.assertEqual(widget.selection_get(), '2')
+        widget.selection_range(3, 4)
+        self.assertEqual(widget.selection_get(), '4')
+        widget.selection_clear()
+        self.assertFalse(widget.selection_present())
+        widget.selection_range(0, 'end')
+        widget.selection_adjust(4)
+        self.assertEqual(widget.selection_get(), '1234')
+        widget.selection_adjust(1)
+        self.assertEqual(widget.selection_get(), '234')
+        widget.selection_adjust(5)
+        self.assertEqual(widget.selection_get(), '2345')
+        widget.selection_adjust(0)
+        self.assertEqual(widget.selection_get(), '12345')
+        widget.selection_adjust(0)
+
 
 @add_standard_options(StandardOptionsTests)
 class TextTest(AbstractWidgetTest, unittest.TestCase):
index 272130f4e643ec34d9d6a8b367e477785e3ec93d..5014584b7bc0b73d0a22f062f7eb034be85580d2 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1094,6 +1094,7 @@ Tim Mitchell
 Zubin Mithra
 Florian Mladitsch
 Doug Moen
+Juliette Monsel
 The Dragon De Monsyne
 Bastien Montagne
 Skip Montanaro
diff --git a/Misc/NEWS.d/next/Library/2018-10-08-16-04-36.bpo-34829.B7v7D0.rst b/Misc/NEWS.d/next/Library/2018-10-08-16-04-36.bpo-34829.B7v7D0.rst
new file mode 100644 (file)
index 0000000..e74b56b
--- /dev/null
@@ -0,0 +1,3 @@
+Add methods ``selection_from``, ``selection_range``, ``selection_present``
+and ``selection_to`` to the ``tkinter.Spinbox`` for consistency with the
+``tkinter.Entry`` widget. Patch by Juliette Monsel.