options = ('chars', 'indices', 'lines',
'displaychars', 'displayindices', 'displaylines',
'xpixels', 'ypixels')
+ self.assertEqual(len(text.count('1.0', 'end', *options, return_ints=True)), 8)
self.assertEqual(len(text.count('1.0', 'end', *options)), 8)
- self.assertEqual(text.count('1.0', 'end', 'chars', 'lines'), (124, 4))
+ self.assertEqual(text.count('1.0', 'end', 'chars', 'lines', return_ints=True),
+ (124, 4))
self.assertEqual(text.count('1.3', '4.5', 'chars', 'lines'), (92, 3))
+ self.assertEqual(text.count('4.5', '1.3', 'chars', 'lines', return_ints=True),
+ (-92, -3))
self.assertEqual(text.count('4.5', '1.3', 'chars', 'lines'), (-92, -3))
+ self.assertEqual(text.count('1.3', '1.3', 'chars', 'lines', return_ints=True),
+ (0, 0))
self.assertEqual(text.count('1.3', '1.3', 'chars', 'lines'), (0, 0))
- self.assertEqual(text.count('1.0', 'end', 'lines'), 4)
- self.assertEqual(text.count('end', '1.0', 'lines'), -4)
- self.assertEqual(text.count('1.3', '1.5', 'lines'), 0)
- self.assertEqual(text.count('1.3', '1.3', 'lines'), 0)
- self.assertEqual(text.count('1.0', 'end'), 124) # 'indices' by default
- self.assertEqual(text.count('1.0', 'end', 'indices'), 124)
+ self.assertEqual(text.count('1.0', 'end', 'lines', return_ints=True), 4)
+ self.assertEqual(text.count('1.0', 'end', 'lines'), (4,))
+ self.assertEqual(text.count('end', '1.0', 'lines', return_ints=True), -4)
+ self.assertEqual(text.count('end', '1.0', 'lines'), (-4,))
+ self.assertEqual(text.count('1.3', '1.5', 'lines', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.5', 'lines'), None)
+ self.assertEqual(text.count('1.3', '1.3', 'lines', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'lines'), None)
+ # Count 'indices' by default.
+ self.assertEqual(text.count('1.0', 'end', return_ints=True), 124)
+ self.assertEqual(text.count('1.0', 'end'), (124,))
+ self.assertEqual(text.count('1.0', 'end', 'indices', return_ints=True), 124)
+ self.assertEqual(text.count('1.0', 'end', 'indices'), (124,))
self.assertRaises(tkinter.TclError, text.count, '1.0', 'end', 'spam')
self.assertRaises(tkinter.TclError, text.count, '1.0', 'end', '-lines')
- self.assertIsInstance(text.count('1.3', '1.5', 'ypixels'), int)
+ self.assertIsInstance(text.count('1.3', '1.5', 'ypixels', return_ints=True), int)
+ self.assertIsInstance(text.count('1.3', '1.5', 'ypixels'), tuple)
+ self.assertIsInstance(text.count('1.3', '1.5', 'update', 'ypixels', return_ints=True), int)
self.assertIsInstance(text.count('1.3', '1.5', 'update', 'ypixels'), int)
- self.assertEqual(text.count('1.3', '1.3', 'update', 'ypixels'), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update', 'ypixels', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update', 'ypixels'), None)
+ self.assertEqual(text.count('1.3', '1.5', 'update', 'indices', return_ints=True), 2)
self.assertEqual(text.count('1.3', '1.5', 'update', 'indices'), 2)
- self.assertEqual(text.count('1.3', '1.3', 'update', 'indices'), 0)
- self.assertEqual(text.count('1.3', '1.5', 'update'), 2)
- self.assertEqual(text.count('1.3', '1.3', 'update'), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update', 'indices', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update', 'indices'), None)
+ self.assertEqual(text.count('1.3', '1.5', 'update', return_ints=True), 2)
+ self.assertEqual(text.count('1.3', '1.5', 'update'), (2,))
+ self.assertEqual(text.count('1.3', '1.3', 'update', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update'), None)
if __name__ == "__main__":
return self.tk.getboolean(self.tk.call(
self._w, 'compare', index1, op, index2))
- def count(self, index1, index2, *options): # new in Tk 8.5
+ def count(self, index1, index2, *options, return_ints=False): # new in Tk 8.5
"""Counts the number of relevant things between the two indices.
If INDEX1 is after INDEX2, the result will be a negative number
The actual items which are counted depends on the options given.
The result is a tuple of integers, one for the result of each
- counting option given, if more than one option is specified,
- otherwise it is an integer. Valid counting options are "chars",
- "displaychars", "displayindices", "displaylines", "indices",
- "lines", "xpixels" and "ypixels". The default value, if no
- option is specified, is "indices". There is an additional possible
- option "update", which if given then all subsequent options ensure
- that any possible out of date information is recalculated."""
+ counting option given, if more than one option is specified or
+ return_ints is false (default), otherwise it is an integer.
+ Valid counting options are "chars", "displaychars",
+ "displayindices", "displaylines", "indices", "lines", "xpixels"
+ and "ypixels". The default value, if no option is specified, is
+ "indices". There is an additional possible option "update",
+ which if given then all subsequent options ensure that any
+ possible out of date information is recalculated.
+ """
options = ['-%s' % arg for arg in options]
res = self.tk.call(self._w, 'count', *options, index1, index2)
if not isinstance(res, int):
res = self._getints(res)
if len(res) == 1:
res, = res
+ if not return_ints:
+ if not res:
+ res = None
+ elif len(options) <= 1:
+ res = (res,)
return res
def debug(self, boolean=None):