[Python-checkins] cpython (2.7): Issue #6181: Fixed minor bugs in tkinter.Listbox methods:

serhiy.storchaka python-checkins at python.org
Mon Jun 2 20:52:34 CEST 2014


http://hg.python.org/cpython/rev/8cd7eb00894e
changeset: 90973:8cd7eb00894e
branch: 2.7
parent: 90968:5ab8ec8b5b5b
user: Serhiy Storchaka <storchaka at gmail.com>
date: Mon Jun 02 21:30:53 2014 +0300
summary:
 Issue #6181: Fixed minor bugs in tkinter.Listbox methods:
bbox(), curselection() and get().
files:
 Lib/lib-tk/Tkinter.py | 15 +-
 Lib/lib-tk/test/test_tkinter/test_widgets.py | 52 ++++++++-
 Lib/lib-tk/test/test_ttk/test_widgets.py | 12 +-
 Lib/lib-tk/test/widget_tests.py | 10 +
 4 files changed, 60 insertions(+), 29 deletions(-)
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -2569,22 +2569,19 @@
 def activate(self, index):
 """Activate item identified by INDEX."""
 self.tk.call(self._w, 'activate', index)
- def bbox(self, *args):
+ def bbox(self, index):
 """Return a tuple of X1,Y1,X2,Y2 coordinates for a rectangle
- which encloses the item identified by index in ARGS."""
- return self._getints(
- self.tk.call((self._w, 'bbox') + args)) or None
+ which encloses the item identified by the given index."""
+ return self._getints(self.tk.call(self._w, 'bbox', index)) or None
 def curselection(self):
- """Return list of indices of currently selected item."""
- # XXX Ought to apply self._getints()...
- return self.tk.splitlist(self.tk.call(
- self._w, 'curselection'))
+ """Return the indices of currently selected item."""
+ return self._getints(self.tk.call(self._w, 'curselection')) or ()
 def delete(self, first, last=None):
 """Delete items from FIRST to LAST (included)."""
 self.tk.call(self._w, 'delete', first, last)
 def get(self, first, last=None):
 """Get list of items from FIRST to LAST (included)."""
- if last:
+ if last is not None:
 return self.tk.splitlist(self.tk.call(
 self._w, 'get', first, last))
 else:
diff --git a/Lib/lib-tk/test/test_tkinter/test_widgets.py b/Lib/lib-tk/test/test_tkinter/test_widgets.py
--- a/Lib/lib-tk/test/test_tkinter/test_widgets.py
+++ b/Lib/lib-tk/test/test_tkinter/test_widgets.py
@@ -464,11 +464,7 @@
 
 def test_bbox(self):
 widget = self.create()
- bbox = widget.bbox(0)
- self.assertEqual(len(bbox), 4)
- for item in bbox:
- self.assertIsInstance(item, int)
-
+ self.assertIsBoundingBox(widget.bbox(0))
 self.assertRaises(Tkinter.TclError, widget.bbox, 'noindex')
 self.assertRaises(Tkinter.TclError, widget.bbox, None)
 self.assertRaises(TypeError, widget.bbox)
@@ -621,11 +617,7 @@
 
 def test_bbox(self):
 widget = self.create()
- bbox = widget.bbox('1.1')
- self.assertEqual(len(bbox), 4)
- for item in bbox:
- self.assertIsInstance(item, int)
-
+ self.assertIsBoundingBox(widget.bbox('1.1'))
 self.assertIsNone(widget.bbox('end'))
 self.assertRaises(Tkinter.TclError, widget.bbox, 'noindex')
 self.assertRaises(Tkinter.TclError, widget.bbox, None)
@@ -782,6 +774,46 @@
 def test_itemconfigure_selectforeground(self):
 self.check_itemconfigure('selectforeground', '#654321')
 
+ def test_box(self):
+ lb = self.create()
+ lb.insert(0, *('el%d' % i for i in range(8)))
+ lb.pack()
+ self.assertIsBoundingBox(lb.bbox(0))
+ self.assertIsNone(lb.bbox(-1))
+ self.assertIsNone(lb.bbox(10))
+ self.assertRaises(TclError, lb.bbox, 'noindex')
+ self.assertRaises(TclError, lb.bbox, None)
+ self.assertRaises(TypeError, lb.bbox)
+ self.assertRaises(TypeError, lb.bbox, 0, 1)
+
+ def test_curselection(self):
+ lb = self.create()
+ lb.insert(0, *('el%d' % i for i in range(8)))
+ lb.selection_clear(0, Tkinter.END)
+ lb.selection_set(2, 4)
+ lb.selection_set(6)
+ self.assertEqual(lb.curselection(), (2, 3, 4, 6))
+ self.assertRaises(TypeError, lb.curselection, 0)
+
+ def test_get(self):
+ lb = self.create()
+ lb.insert(0, *('el%d' % i for i in range(8)))
+ self.assertEqual(lb.get(0), 'el0')
+ self.assertEqual(lb.get(3), 'el3')
+ self.assertEqual(lb.get('end'), 'el7')
+ self.assertEqual(lb.get(8), '')
+ self.assertEqual(lb.get(-1), '')
+ self.assertEqual(lb.get(3, 5), ('el3', 'el4', 'el5'))
+ self.assertEqual(lb.get(5, 'end'), ('el5', 'el6', 'el7'))
+ self.assertEqual(lb.get(5, 0), ())
+ self.assertEqual(lb.get(0, 0), ('el0',))
+ self.assertRaises(TclError, lb.get, 'noindex')
+ self.assertRaises(TclError, lb.get, None)
+ self.assertRaises(TypeError, lb.get)
+ self.assertRaises(TclError, lb.get, 'end', 'noindex')
+ self.assertRaises(TypeError, lb.get, 1, 2, 3)
+ self.assertRaises(TclError, lb.get, 2.4)
+
 
 @add_standard_options(PixelSizeTests, StandardOptionsTests)
 class ScaleTest(AbstractWidgetTest, unittest.TestCase):
diff --git a/Lib/lib-tk/test/test_ttk/test_widgets.py b/Lib/lib-tk/test/test_ttk/test_widgets.py
--- a/Lib/lib-tk/test/test_ttk/test_widgets.py
+++ b/Lib/lib-tk/test/test_ttk/test_widgets.py
@@ -461,10 +461,7 @@
 
 
 def test_bbox(self):
- self.assertEqual(len(self.entry.bbox(0)), 4)
- for item in self.entry.bbox(0):
- self.assertIsInstance(item, int)
-
+ self.assertIsBoundingBox(self.entry.bbox(0))
 self.assertRaises(Tkinter.TclError, self.entry.bbox, 'noindex')
 self.assertRaises(Tkinter.TclError, self.entry.bbox, None)
 
@@ -1217,12 +1214,7 @@
 self.assertTrue(children)
 
 bbox = self.tv.bbox(children[0])
- self.assertEqual(len(bbox), 4)
- self.assertIsInstance(bbox, tuple)
- for item in bbox:
- if not isinstance(item, int):
- self.fail("Invalid bounding box: %s" % bbox)
- break
+ self.assertIsBoundingBox(bbox)
 
 # compare width in bboxes
 self.tv['columns'] = ['test']
diff --git a/Lib/lib-tk/test/widget_tests.py b/Lib/lib-tk/test/widget_tests.py
--- a/Lib/lib-tk/test/widget_tests.py
+++ b/Lib/lib-tk/test/widget_tests.py
@@ -221,6 +221,16 @@
 def checkVariableParam(self, widget, name, var):
 self.checkParam(widget, name, var, conv=str)
 
+ def assertIsBoundingBox(self, bbox):
+ self.assertIsNotNone(bbox)
+ self.assertIsInstance(bbox, tuple)
+ if len(bbox) != 4:
+ self.fail('Invalid bounding box: %r' % (bbox,))
+ for item in bbox:
+ if not isinstance(item, int):
+ self.fail('Invalid bounding box: %r' % (bbox,))
+ break
+
 
 class StandardOptionsTests(object):
 STANDARD_OPTIONS = (
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /