Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / lib / python2.4 / site-packages / Pmw / Pmw_1_2 / lib / PmwBlt.py
CommitLineData
920dae64
AT
1# Python interface to some of the commands of the 2.4 version of the
2# BLT extension to tcl.
3
4import string
5import types
6import Tkinter
7
8# Supported commands:
9_busyCommand = '::blt::busy'
10_vectorCommand = '::blt::vector'
11_graphCommand = '::blt::graph'
12_testCommand = '::blt::*'
13_chartCommand = '::blt::stripchart'
14_tabsetCommand = '::blt::tabset'
15
16_haveBlt = None
17_haveBltBusy = None
18
19def _checkForBlt(window):
20 global _haveBlt
21 global _haveBltBusy
22
23 # Blt may be a package which has not yet been loaded. Try to load it.
24 try:
25 window.tk.call('package', 'require', 'BLT')
26 except Tkinter.TclError:
27 # Another way to try to dynamically load blt:
28 try:
29 window.tk.call('load', '', 'Blt')
30 except Tkinter.TclError:
31 pass
32
33 _haveBlt= (window.tk.call('info', 'commands', _testCommand) != '')
34 _haveBltBusy = (window.tk.call('info', 'commands', _busyCommand) != '')
35
36def haveblt(window):
37 if _haveBlt is None:
38 _checkForBlt(window)
39 return _haveBlt
40
41def havebltbusy(window):
42 if _haveBlt is None:
43 _checkForBlt(window)
44 return _haveBltBusy
45
46def _loadBlt(window):
47 if _haveBlt is None:
48 if window is None:
49 window = Tkinter._default_root
50 if window is None:
51 window = Tkinter.Tk()
52 _checkForBlt(window)
53
54def busy_hold(window, cursor = None):
55 _loadBlt(window)
56 if cursor is None:
57 window.tk.call(_busyCommand, 'hold', window._w)
58 else:
59 window.tk.call(_busyCommand, 'hold', window._w, '-cursor', cursor)
60
61def busy_release(window):
62 _loadBlt(window)
63 window.tk.call(_busyCommand, 'release', window._w)
64
65def busy_forget(window):
66 _loadBlt(window)
67 window.tk.call(_busyCommand, 'forget', window._w)
68
69#=============================================================================
70# Interface to the blt vector command which makes it look like the
71# builtin python list type.
72# The -variable, -command, -watchunset creation options are not supported.
73# The dup, merge, notify, offset, populate, seq and variable methods
74# and the +, -, * and / operations are not supported.
75
76# Blt vector functions:
77def vector_expr(expression):
78 tk = Tkinter._default_root.tk
79 strList = tk.splitlist(tk.call(_vectorCommand, 'expr', expression))
80 return tuple(map(string.atof, strList))
81
82def vector_names(pattern = None):
83 tk = Tkinter._default_root.tk
84 return tk.splitlist(tk.call(_vectorCommand, 'names', pattern))
85
86class Vector:
87 _varnum = 0
88 def __init__(self, size=None, master=None):
89 # <size> can be either an integer size, or a string "first:last".
90 _loadBlt(master)
91 if master:
92 self._master = master
93 else:
94 self._master = Tkinter._default_root
95 self.tk = self._master.tk
96 self._name = 'PY_VEC' + str(Vector._varnum)
97 Vector._varnum = Vector._varnum + 1
98 if size is None:
99 self.tk.call(_vectorCommand, 'create', self._name)
100 else:
101 self.tk.call(_vectorCommand, 'create', '%s(%s)' % (self._name, size))
102 def __del__(self):
103 self.tk.call(_vectorCommand, 'destroy', self._name)
104 def __str__(self):
105 return self._name
106
107 def __repr__(self):
108 return '[' + string.join(map(str, self), ', ') + ']'
109 def __cmp__(self, list):
110 return cmp(self[:], list)
111
112 def __len__(self):
113 return self.tk.getint(self.tk.call(self._name, 'length'))
114 def __getitem__(self, key):
115 oldkey = key
116 if key < 0:
117 key = key + len(self)
118 try:
119 return self.tk.getdouble(self.tk.globalgetvar(self._name, str(key)))
120 except Tkinter.TclError:
121 raise IndexError, oldkey
122 def __setitem__(self, key, value):
123 if key < 0:
124 key = key + len(self)
125 return self.tk.globalsetvar(self._name, str(key), float(value))
126
127 def __delitem__(self, key):
128 if key < 0:
129 key = key + len(self)
130 return self.tk.globalunsetvar(self._name, str(key))
131
132 def __getslice__(self, start, end):
133 length = len(self)
134 if start < 0:
135 start = 0
136 if end > length:
137 end = length
138 if start >= end:
139 return []
140 end = end - 1 # Blt vector slices include end point.
141 text = self.tk.globalgetvar(self._name, str(start) + ':' + str(end))
142 return map(self.tk.getdouble, self.tk.splitlist(text))
143
144 def __setslice__(self, start, end, list):
145 if start > end:
146 end = start
147 self.set(self[:start] + list + self[end:])
148
149 def __delslice__(self, start, end):
150 if start < end:
151 self.set(self[:start] + self[end:])
152
153 def __add__(self, list):
154 return self[:] + list
155 def __radd__(self, list):
156 return list + self[:]
157 def __mul__(self, n):
158 return self[:] * n
159 __rmul__ = __mul__
160
161 # Python builtin list methods:
162 def append(self, *args):
163 self.tk.call(self._name, 'append', args)
164 def count(self, obj):
165 return self[:].count(obj)
166 def index(self, value):
167 return self[:].index(value)
168 def insert(self, index, value):
169 self[index:index] = [value]
170 def remove(self, value):
171 del self[self.index(value)]
172 def reverse(self):
173 s = self[:]
174 s.reverse()
175 self.set(s)
176 def sort(self, *args):
177 s = self[:]
178 s.sort()
179 self.set(s)
180
181 # Blt vector instance methods:
182 # append - same as list method above
183 def clear(self):
184 self.tk.call(self._name, 'clear')
185 def delete(self, *args):
186 self.tk.call((self._name, 'delete') + args)
187 def expr(self, expression):
188 self.tk.call(self._name, 'expr', expression)
189 def length(self, newSize=None):
190 return self.tk.getint(self.tk.call(self._name, 'length', newSize))
191 def range(self, first, last=None):
192 # Note that, unlike self[first:last], this includes the last
193 # item in the returned range.
194 text = self.tk.call(self._name, 'range', first, last)
195 return map(self.tk.getdouble, self.tk.splitlist(text))
196 def search(self, start, end=None):
197 return self._master._getints(self.tk.call(
198 self._name, 'search', start, end))
199 def set(self, list):
200 if type(list) != types.TupleType:
201 list = tuple(list)
202 self.tk.call(self._name, 'set', list)
203
204 # The blt vector sort method has different semantics to the python
205 # list sort method. Call these blt_sort:
206 def blt_sort(self, *args):
207 self.tk.call((self._name, 'sort') + args)
208 def blt_sort_reverse(self, *args):
209 self.tk.call((self._name, 'sort', '-reverse') + args)
210
211 # Special blt vector indexes:
212 def min(self):
213 return self.tk.getdouble(self.tk.globalgetvar(self._name, 'min'))
214 def max(self):
215 return self.tk.getdouble(self.tk.globalgetvar(self._name, 'max'))
216
217 # Method borrowed from Tkinter.Var class:
218 def get(self):
219 return self[:]
220
221#=============================================================================
222
223# This is a general purpose configure routine which can handle the
224# configuration of widgets, items within widgets, etc. Supports the
225# forms configure() and configure('font') for querying and
226# configure(font = 'fixed', text = 'hello') for setting.
227
228def _doConfigure(widget, subcommand, option, kw):
229
230 if not option and not kw:
231 # Return a description of all options.
232 ret = {}
233 options = widget.tk.splitlist(widget.tk.call(subcommand))
234 for optionString in options:
235 optionInfo = widget.tk.splitlist(optionString)
236 option = optionInfo[0][1:]
237 ret[option] = (option,) + optionInfo[1:]
238 return ret
239
240 if option:
241 # Return a description of the option given by <option>.
242 if kw:
243 # Having keywords implies setting configuration options.
244 # Can't set and get in one command!
245 raise ValueError, 'cannot have option argument with keywords'
246 option = '-' + option
247 optionInfo = widget.tk.splitlist(widget.tk.call(subcommand + (option,)))
248 return (optionInfo[0][1:],) + optionInfo[1:]
249
250 # Otherwise, set the given configuration options.
251 widget.tk.call(subcommand + widget._options(kw))
252
253#=============================================================================
254
255class Graph(Tkinter.Widget):
256 # Wrapper for the blt graph widget, version 2.4.
257
258 def __init__(self, master=None, cnf={}, **kw):
259 _loadBlt(master)
260 Tkinter.Widget.__init__(self, master, _graphCommand, cnf, kw)
261
262 def bar_create(self, name, **kw):
263 self.tk.call((self._w, 'bar', 'create', name) + self._options(kw))
264
265 def line_create(self, name, **kw):
266 self.tk.call((self._w, 'line', 'create', name) + self._options(kw))
267
268 def extents(self, item):
269 return self.tk.getint(self.tk.call(self._w, 'extents', item))
270
271 def invtransform(self, winX, winY):
272 return self._getdoubles(
273 self.tk.call(self._w, 'invtransform', winX, winY))
274
275 def inside(self, x, y):
276 return self.tk.getint(self.tk.call(self._w, 'inside', x, y))
277
278 def snap(self, photoName):
279 self.tk.call(self._w, 'snap', photoName)
280
281 def transform(self, x, y):
282 return self._getdoubles(self.tk.call(self._w, 'transform', x, y))
283
284 def axis_cget(self, axisName, key):
285 return self.tk.call(self._w, 'axis', 'cget', axisName, '-' + key)
286 def axis_configure(self, axes, option=None, **kw):
287 # <axes> may be a list of axisNames.
288 if type(axes) == types.StringType:
289 axes = [axes]
290 subcommand = (self._w, 'axis', 'configure') + tuple(axes)
291 return _doConfigure(self, subcommand, option, kw)
292 def axis_create(self, axisName, **kw):
293 self.tk.call((self._w, 'axis', 'create', axisName) + self._options(kw))
294 def axis_delete(self, *args):
295 self.tk.call((self._w, 'axis', 'delete') + args)
296 def axis_invtransform(self, axisName, value):
297 return self.tk.getdouble(self.tk.call(
298 self._w, 'axis', 'invtransform', axisName, value))
299 def axis_limits(self, axisName):
300 return self._getdoubles(self.tk.call(
301 self._w, 'axis', 'limits', axisName))
302 def axis_names(self, *args):
303 return self.tk.splitlist(
304 self.tk.call((self._w, 'axis', 'names') + args))
305 def axis_transform(self, axisName, value):
306 return self.tk.getint(self.tk.call(
307 self._w, 'axis', 'transform', axisName, value))
308
309 def xaxis_cget(self, key):
310 return self.tk.call(self._w, 'xaxis', 'cget', '-' + key)
311 def xaxis_configure(self, option=None, **kw):
312 subcommand = (self._w, 'xaxis', 'configure')
313 return _doConfigure(self, subcommand, option, kw)
314 def xaxis_invtransform(self, value):
315 return self.tk.getdouble(self.tk.call(
316 self._w, 'xaxis', 'invtransform', value))
317 def xaxis_limits(self):
318 return self._getdoubles(self.tk.call(self._w, 'xaxis', 'limits'))
319 def xaxis_transform(self, value):
320 return self.tk.getint(self.tk.call(
321 self._w, 'xaxis', 'transform', value))
322 def xaxis_use(self, axisName = None):
323 return self.tk.call(self._w, 'xaxis', 'use', axisName)
324
325 def x2axis_cget(self, key):
326 return self.tk.call(self._w, 'x2axis', 'cget', '-' + key)
327 def x2axis_configure(self, option=None, **kw):
328 subcommand = (self._w, 'x2axis', 'configure')
329 return _doConfigure(self, subcommand, option, kw)
330 def x2axis_invtransform(self, value):
331 return self.tk.getdouble(self.tk.call(
332 self._w, 'x2axis', 'invtransform', value))
333 def x2axis_limits(self):
334 return self._getdoubles(self.tk.call(self._w, 'x2axis', 'limits'))
335 def x2axis_transform(self, value):
336 return self.tk.getint(self.tk.call(
337 self._w, 'x2axis', 'transform', value))
338 def x2axis_use(self, axisName = None):
339 return self.tk.call(self._w, 'x2axis', 'use', axisName)
340
341 def yaxis_cget(self, key):
342 return self.tk.call(self._w, 'yaxis', 'cget', '-' + key)
343 def yaxis_configure(self, option=None, **kw):
344 subcommand = (self._w, 'yaxis', 'configure')
345 return _doConfigure(self, subcommand, option, kw)
346 def yaxis_invtransform(self, value):
347 return self.tk.getdouble(self.tk.call(
348 self._w, 'yaxis', 'invtransform', value))
349 def yaxis_limits(self):
350 return self._getdoubles(self.tk.call(self._w, 'yaxis', 'limits'))
351 def yaxis_transform(self, value):
352 return self.tk.getint(self.tk.call(
353 self._w, 'yaxis', 'transform', value))
354 def yaxis_use(self, axisName = None):
355 return self.tk.call(self._w, 'yaxis', 'use', axisName)
356
357 def y2axis_cget(self, key):
358 return self.tk.call(self._w, 'y2axis', 'cget', '-' + key)
359 def y2axis_configure(self, option=None, **kw):
360 subcommand = (self._w, 'y2axis', 'configure')
361 return _doConfigure(self, subcommand, option, kw)
362 def y2axis_invtransform(self, value):
363 return self.tk.getdouble(self.tk.call(
364 self._w, 'y2axis', 'invtransform', value))
365 def y2axis_limits(self):
366 return self._getdoubles(self.tk.call(self._w, 'y2axis', 'limits'))
367 def y2axis_transform(self, value):
368 return self.tk.getint(self.tk.call(
369 self._w, 'y2axis', 'transform', value))
370 def y2axis_use(self, axisName = None):
371 return self.tk.call(self._w, 'y2axis', 'use', axisName)
372
373 def crosshairs_cget(self, key):
374 return self.tk.call(self._w, 'crosshairs', 'cget', '-' + key)
375 def crosshairs_configure(self, option=None, **kw):
376 subcommand = (self._w, 'crosshairs', 'configure')
377 return _doConfigure(self, subcommand, option, kw)
378 def crosshairs_off(self):
379 self.tk.call(self._w, 'crosshairs', 'off')
380 def crosshairs_on(self):
381 self.tk.call(self._w, 'crosshairs', 'on')
382 def crosshairs_toggle(self):
383 self.tk.call(self._w, 'crosshairs', 'toggle')
384
385 def element_activate(self, name, *args):
386 self.tk.call((self._w, 'element', 'activate', name) + args)
387 def element_bind(self, tagName, sequence=None, func=None, add=None):
388 return self._bind((self._w, 'element', 'bind', tagName),
389 sequence, func, add)
390 def element_unbind(self, tagName, sequence, funcid=None):
391 self.tk.call(self._w, 'element', 'bind', tagName, sequence, '')
392 if funcid:
393 self.deletecommand(funcid)
394
395 def element_cget(self, name, key):
396 return self.tk.call(self._w, 'element', 'cget', name, '-' + key)
397
398 def element_closest(self, x, y, *args, **kw):
399 var = 'python_private_1'
400 success = self.tk.getint(self.tk.call(
401 (self._w, 'element', 'closest', x, y, var) +
402 self._options(kw) + args))
403 if success:
404 rtn = {}
405 rtn['dist'] = self.tk.getdouble(self.tk.globalgetvar(var, 'dist'))
406 rtn['x'] = self.tk.getdouble(self.tk.globalgetvar(var, 'x'))
407 rtn['y'] = self.tk.getdouble(self.tk.globalgetvar(var, 'y'))
408 rtn['index'] = self.tk.getint(self.tk.globalgetvar(var, 'index'))
409 rtn['name'] = self.tk.globalgetvar(var, 'name')
410 return rtn
411 else:
412 return None
413
414 def element_configure(self, names, option=None, **kw):
415 # <names> may be a list of elemNames.
416 if type(names) == types.StringType:
417 names = [names]
418 subcommand = (self._w, 'element', 'configure') + tuple(names)
419 return _doConfigure(self, subcommand, option, kw)
420
421 def element_deactivate(self, *args):
422 self.tk.call((self._w, 'element', 'deactivate') + args)
423
424 def element_delete(self, *args):
425 self.tk.call((self._w, 'element', 'delete') + args)
426 def element_exists(self, name):
427 return self.tk.getboolean(
428 self.tk.call(self._w, 'element', 'exists', name))
429
430 def element_names(self, *args):
431 return self.tk.splitlist(
432 self.tk.call((self._w, 'element', 'names') + args))
433 def element_show(self, nameList=None):
434 if nameList is not None:
435 nameList = tuple(nameList)
436 return self.tk.splitlist(
437 self.tk.call(self._w, 'element', 'show', nameList))
438 def element_type(self, name):
439 return self.tk.call(self._w, 'element', 'type', name)
440
441 def grid_cget(self, key):
442 return self.tk.call(self._w, 'grid', 'cget', '-' + key)
443 def grid_configure(self, option=None, **kw):
444 subcommand = (self._w, 'grid', 'configure')
445 return _doConfigure(self, subcommand, option, kw)
446
447 def grid_off(self):
448 self.tk.call(self._w, 'grid', 'off')
449 def grid_on(self):
450 self.tk.call(self._w, 'grid', 'on')
451 def grid_toggle(self):
452 self.tk.call(self._w, 'grid', 'toggle')
453
454 def legend_activate(self, *args):
455 self.tk.call((self._w, 'legend', 'activate') + args)
456 def legend_bind(self, tagName, sequence=None, func=None, add=None):
457 return self._bind((self._w, 'legend', 'bind', tagName),
458 sequence, func, add)
459 def legend_unbind(self, tagName, sequence, funcid=None):
460 self.tk.call(self._w, 'legend', 'bind', tagName, sequence, '')
461 if funcid:
462 self.deletecommand(funcid)
463
464 def legend_cget(self, key):
465 return self.tk.call(self._w, 'legend', 'cget', '-' + key)
466 def legend_configure(self, option=None, **kw):
467 subcommand = (self._w, 'legend', 'configure')
468 return _doConfigure(self, subcommand, option, kw)
469 def legend_deactivate(self, *args):
470 self.tk.call((self._w, 'legend', 'deactivate') + args)
471 def legend_get(self, pos):
472 return self.tk.call(self._w, 'legend', 'get', pos)
473
474 def pen_cget(self, name, key):
475 return self.tk.call(self._w, 'pen', 'cget', name, '-' + key)
476 def pen_configure(self, names, option=None, **kw):
477 # <names> may be a list of penNames.
478 if type(names) == types.StringType:
479 names = [names]
480 subcommand = (self._w, 'pen', 'configure') + tuple(names)
481 return _doConfigure(self, subcommand, option, kw)
482 def pen_create(self, name, **kw):
483 self.tk.call((self._w, 'pen', 'create', name) + self._options(kw))
484 def pen_delete(self, *args):
485 self.tk.call((self._w, 'pen', 'delete') + args)
486 def pen_names(self, *args):
487 return self.tk.splitlist(self.tk.call((self._w, 'pen', 'names') + args))
488
489 def postscript_cget(self, key):
490 return self.tk.call(self._w, 'postscript', 'cget', '-' + key)
491 def postscript_configure(self, option=None, **kw):
492 subcommand = (self._w, 'postscript', 'configure')
493 return _doConfigure(self, subcommand, option, kw)
494 def postscript_output(self, fileName=None, **kw):
495 prefix = (self._w, 'postscript', 'output')
496 if fileName is None:
497 return self.tk.call(prefix + self._options(kw))
498 else:
499 self.tk.call(prefix + (fileName,) + self._options(kw))
500
501 def marker_after(self, first, second=None):
502 self.tk.call(self._w, 'marker', 'after', first, second)
503 def marker_before(self, first, second=None):
504 self.tk.call(self._w, 'marker', 'before', first, second)
505 def marker_bind(self, tagName, sequence=None, func=None, add=None):
506 return self._bind((self._w, 'marker', 'bind', tagName),
507 sequence, func, add)
508 def marker_unbind(self, tagName, sequence, funcid=None):
509 self.tk.call(self._w, 'marker', 'bind', tagName, sequence, '')
510 if funcid:
511 self.deletecommand(funcid)
512
513 def marker_cget(self, name, key):
514 return self.tk.call(self._w, 'marker', 'cget', name, '-' + key)
515 def marker_configure(self, names, option=None, **kw):
516 # <names> may be a list of markerIds.
517 if type(names) == types.StringType:
518 names = [names]
519 subcommand = (self._w, 'marker', 'configure') + tuple(names)
520 return _doConfigure(self, subcommand, option, kw)
521 def marker_create(self, type, **kw):
522 return self.tk.call(
523 (self._w, 'marker', 'create', type) + self._options(kw))
524
525 def marker_delete(self, *args):
526 self.tk.call((self._w, 'marker', 'delete') + args)
527 def marker_exists(self, name):
528 return self.tk.getboolean(
529 self.tk.call(self._w, 'marker', 'exists', name))
530 def marker_names(self, *args):
531 return self.tk.splitlist(
532 self.tk.call((self._w, 'marker', 'names') + args))
533 def marker_type(self, name):
534 type = self.tk.call(self._w, 'marker', 'type', name)
535 if type == '':
536 type = None
537 return type
538
539#=============================================================================
540class Stripchart(Graph):
541 # Wrapper for the blt stripchart widget, version 2.4.
542
543 def __init__(self, master=None, cnf={}, **kw):
544 _loadBlt(master)
545 Tkinter.Widget.__init__(self, master, _chartCommand, cnf, kw)
546
547#=============================================================================
548class Tabset(Tkinter.Widget):
549
550 # Wrapper for the blt TabSet widget, version 2.4.
551
552 def __init__(self, master=None, cnf={}, **kw):
553 _loadBlt(master)
554 Tkinter.Widget.__init__(self, master, _tabsetCommand, cnf, kw)
555
556 def activate(self, tabIndex):
557 self.tk.call(self._w, 'activate', tabIndex)
558
559 # This is the 'bind' sub-command:
560 def tag_bind(self, tagName, sequence=None, func=None, add=None):
561 return self._bind((self._w, 'bind', tagName), sequence, func, add)
562
563 def tag_unbind(self, tagName, sequence, funcid=None):
564 self.tk.call(self._w, 'bind', tagName, sequence, '')
565 if funcid:
566 self.deletecommand(funcid)
567
568 def delete(self, first, last = None):
569 self.tk.call(self._w, 'delete', first, last)
570
571 # This is the 'focus' sub-command:
572 def tab_focus(self, tabIndex):
573 self.tk.call(self._w, 'focus', tabIndex)
574
575 def get(self, tabIndex):
576 return self.tk.call(self._w, 'get', tabIndex)
577
578 def index(self, tabIndex):
579 index = self.tk.call(self._w, 'index', tabIndex)
580 if index == '':
581 return None
582 else:
583 return self.tk.getint(self.tk.call(self._w, 'index', tabIndex))
584
585 def insert(self, position, name1, *names, **kw):
586 self.tk.call(
587 (self._w, 'insert', position, name1) + names + self._options(kw))
588
589 def invoke(self, tabIndex):
590 return self.tk.call(self._w, 'invoke', tabIndex)
591
592 def move(self, tabIndex1, beforeOrAfter, tabIndex2):
593 self.tk.call(self._w, 'move', tabIndex1, beforeOrAfter, tabIndex2)
594
595 def nearest(self, x, y):
596 return self.tk.call(self._w, 'nearest', x, y)
597
598 def scan_mark(self, x, y):
599 self.tk.call(self._w, 'scan', 'mark', x, y)
600
601 def scan_dragto(self, x, y):
602 self.tk.call(self._w, 'scan', 'dragto', x, y)
603
604 def see(self, index):
605 self.tk.call(self._w, 'see', index)
606
607 def see(self, tabIndex):
608 self.tk.call(self._w,'see',tabIndex)
609
610 def size(self):
611 return self.tk.getint(self.tk.call(self._w, 'size'))
612
613 def tab_cget(self, tabIndex, option):
614 if option[:1] != '-':
615 option = '-' + option
616 if option[-1:] == '_':
617 option = option[:-1]
618 return self.tk.call(self._w, 'tab', 'cget', tabIndex, option)
619
620 def tab_configure(self, tabIndexes, option=None, **kw):
621 # <tabIndexes> may be a list of tabs.
622 if type(tabIndexes) in (types.StringType, types.IntType):
623 tabIndexes = [tabIndexes]
624 subcommand = (self._w, 'tab', 'configure') + tuple(tabIndexes)
625 return _doConfigure(self, subcommand, option, kw)
626
627 def tab_names(self, *args):
628 return self.tk.splitlist(self.tk.call((self._w, 'tab', 'names') + args))
629
630 def tab_tearoff(self, tabIndex, newName = None):
631 if newName is None:
632 name = self.tk.call(self._w, 'tab', 'tearoff', tabIndex)
633 return self.nametowidget(name)
634 else:
635 self.tk.call(self._w, 'tab', 'tearoff', tabIndex, newName)
636
637 def view(self):
638 s = self.tk.call(self._w, 'view')
639 return tuple(map(self.tk.getint, self.tk.splitlist(s)))
640 def view_moveto(self, fraction):
641 self.tk.call(self._w, 'view', 'moveto', fraction)
642 def view_scroll(self, number, what):
643 self.tk.call(self._w, 'view', 'scroll', number, what)