diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-06-02 18:30:53 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-06-02 18:30:53 (GMT) |
commit | f94686f6b887bd5b50ef60d5615f00e0fd8520da (patch) | |
tree | 21000ada54398210863575c5b8e3543ebfeb3a18 /Lib/lib-tk | |
parent | 417367a48a16bb8444155805d9b671014597144c (diff) | |
download | cpython-f94686f6b887bd5b50ef60d5615f00e0fd8520da.zip cpython-f94686f6b887bd5b50ef60d5615f00e0fd8520da.tar.gz cpython-f94686f6b887bd5b50ef60d5615f00e0fd8520da.tar.bz2 |
Issue #6181: Fixed minor bugs in tkinter.Listbox methods:
bbox(), curselection() and get().
Diffstat (limited to 'Lib/lib-tk')
-rw-r--r-- | Lib/lib-tk/Tkinter.py | 15 | ||||
-rw-r--r-- | Lib/lib-tk/test/test_tkinter/test_widgets.py | 52 | ||||
-rw-r--r-- | Lib/lib-tk/test/test_ttk/test_widgets.py | 12 | ||||
-rw-r--r-- | 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 index 02014d0..d3d7d83 100644 --- a/Lib/lib-tk/Tkinter.py +++ b/Lib/lib-tk/Tkinter.py @@ -2569,22 +2569,19 @@ class Listbox(Widget, XView, YView): 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 index 15d05e7..3f5f0b9 100644 --- a/Lib/lib-tk/test/test_tkinter/test_widgets.py +++ b/Lib/lib-tk/test/test_tkinter/test_widgets.py @@ -464,11 +464,7 @@ class SpinboxTest(EntryTest, unittest.TestCase): 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 @@ class TextTest(AbstractWidgetTest, unittest.TestCase): 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 @@ class ListboxTest(AbstractWidgetTest, unittest.TestCase): 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 index f0777ab..4b01364 100644 --- a/Lib/lib-tk/test/test_ttk/test_widgets.py +++ b/Lib/lib-tk/test/test_ttk/test_widgets.py @@ -461,10 +461,7 @@ class EntryTest(AbstractWidgetTest, unittest.TestCase): 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 @@ class TreeviewTest(AbstractWidgetTest, unittest.TestCase): 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 index b50c3bc..28b245d 100644 --- a/Lib/lib-tk/test/widget_tests.py +++ b/Lib/lib-tk/test/widget_tests.py @@ -221,6 +221,16 @@ class AbstractWidgetTest(object): 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 = ( |