]> granicus.if.org Git - python/commitdiff
Issue #6167: Scrollbar.activate() now returns the name of active element if
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 23 Jul 2014 19:00:44 +0000 (22:00 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Wed, 23 Jul 2014 19:00:44 +0000 (22:00 +0300)
the argument is not specified.  Scrollbar.set() now always accepts only 2
arguments.  Added tests for Scrollbar.activate() and Scrollbar.set().

Lib/tkinter/__init__.py
Lib/tkinter/test/test_tkinter/test_widgets.py
Misc/NEWS

index d37c39fe4efe04b3e91a3d342d578395df460577..863177eeb210af08acdd83d9828b173b07266293 100644 (file)
@@ -2875,10 +2875,14 @@ class Scrollbar(Widget):
         relief, repeatdelay, repeatinterval, takefocus,
         troughcolor, width."""
         Widget.__init__(self, master, 'scrollbar', cnf, kw)
-    def activate(self, index):
-        """Display the element at INDEX with activebackground and activerelief.
-        INDEX can be "arrow1","slider" or "arrow2"."""
-        self.tk.call(self._w, 'activate', index)
+    def activate(self, index=None):
+        """Marks the element indicated by index as active.
+        The only index values understood by this method are "arrow1",
+        "slider", or "arrow2".  If any other value is specified then no
+        element of the scrollbar will be active.  If index is not specified,
+        the method returns the name of the element that is currently active,
+        or None if no element is active."""
+        return self.tk.call(self._w, 'activate', index) or None
     def delta(self, deltax, deltay):
         """Return the fractional change of the scrollbar setting if it
         would be moved by DELTAX or DELTAY pixels."""
@@ -2896,10 +2900,10 @@ class Scrollbar(Widget):
         """Return the current fractional values (upper and lower end)
         of the slider position."""
         return self._getdoubles(self.tk.call(self._w, 'get'))
-    def set(self, *args):
+    def set(self, first, last):
         """Set the fractional values of the slider position (upper and
         lower ends as value between 0 and 1)."""
-        self.tk.call((self._w, 'set') + args)
+        self.tk.call(self._w, 'set', first, last)
 
 
 
index 310fa92084d8cf73b8762171dc883e8351f405c4..6e3836f96dacfc56a21d1870b8e55689b4ea08e6 100644 (file)
@@ -916,6 +916,25 @@ class ScrollbarTest(AbstractWidgetTest, unittest.TestCase):
         self.checkEnumParam(widget, 'orient', 'vertical', 'horizontal',
                 errmsg='bad orientation "{}": must be vertical or horizontal')
 
+    def test_activate(self):
+        sb = self.create()
+        for e in ('arrow1', 'slider', 'arrow2'):
+            sb.activate(e)
+            self.assertEqual(sb.activate(), e)
+        sb.activate('')
+        self.assertIsNone(sb.activate())
+        self.assertRaises(TypeError, sb.activate, 'arrow1', 'arrow2')
+
+    def test_set(self):
+        sb = self.create()
+        sb.set(0.2, 0.4)
+        self.assertEqual(sb.get(), (0.2, 0.4))
+        self.assertRaises(TclError, sb.set, 'abc', 'def')
+        self.assertRaises(TclError, sb.set, 0.6, 'def')
+        self.assertRaises(TclError, sb.set, 0.6, None)
+        self.assertRaises(TypeError, sb.set, 0.6)
+        self.assertRaises(TypeError, sb.set, 0.6, 0.7, 0.8)
+
 
 @add_standard_options(StandardOptionsTests)
 class PanedWindowTest(AbstractWidgetTest, unittest.TestCase):
index fc2e2119a518d914d58374f88eca7a9b1d698452..715c1707f6cf3f8aee2820f5699243575084e02d 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -108,6 +108,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #6167: Scrollbar.activate() now returns the name of active element if
+  the argument is not specified.  Scrollbar.set() now always accepts only 2
+  arguments.
+
 - Issue #15275: Clean up and speed up the ntpath module.
 
 - Issue #21888: plistlib's load() and loads() now work if the fmt parameter is