| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | """Wrapper functions for Tcl/Tk.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Tkinter provides classes which allow the display, positioning and | 
					
						
							|  |  |  | control of widgets. Toplevel widgets are Tk and Toplevel. Other | 
					
						
							|  |  |  | widgets are Frame, Label, Entry, Text, Canvas, Button, Radiobutton, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  | Checkbutton, Scale, Listbox, Scrollbar, OptionMenu, Spinbox | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | LabelFrame and PanedWindow. | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | Properties of the widgets are specified with keyword arguments. | 
					
						
							|  |  |  | Keyword arguments have the same name as the corresponding resource | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  | under Tk. | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Widgets are positioned with one of the geometry managers Place, Pack | 
					
						
							|  |  |  | or Grid. These managers can be called with methods place, pack, grid | 
					
						
							|  |  |  | available in every Widget. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-01 18:29:55 +00:00
										 |  |  | Actions are bound to events by resources (e.g. keyword argument | 
					
						
							|  |  |  | command) or with the method bind. | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Example (Hello, World): | 
					
						
							|  |  |  | import Tkinter | 
					
						
							|  |  |  | from Tkconstants import * | 
					
						
							|  |  |  | tk = Tkinter.Tk() | 
					
						
							|  |  |  | frame = Tkinter.Frame(tk, relief=RIDGE, borderwidth=2) | 
					
						
							|  |  |  | frame.pack(fill=BOTH,expand=1) | 
					
						
							|  |  |  | label = Tkinter.Label(frame, text="Hello, World") | 
					
						
							|  |  |  | label.pack(fill=X, expand=1) | 
					
						
							|  |  |  | button = Tkinter.Button(frame,text="Exit",command=tk.destroy) | 
					
						
							|  |  |  | button.pack(side=BOTTOM) | 
					
						
							|  |  |  | tk.mainloop() | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-05-16 16:00:19 +00:00
										 |  |  | __version__ = "$Revision$" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-01-04 18:06:45 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | if sys.platform == "win32": | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     import FixTk # Attempt to configure Tcl/Tk without requiring PATH | 
					
						
							| 
									
										
										
										
											1999-01-04 18:06:45 +00:00
										 |  |  | import _tkinter # If this fails your Python may not be configured for Tk | 
					
						
							| 
									
										
										
										
											1997-02-15 18:33:24 +00:00
										 |  |  | tkinter = _tkinter # b/w compat for export | 
					
						
							|  |  |  | TclError = _tkinter.TclError | 
					
						
							| 
									
										
										
										
											1995-03-17 16:21:33 +00:00
										 |  |  | from types import * | 
					
						
							| 
									
										
										
										
											1995-09-07 19:22:00 +00:00
										 |  |  | from Tkconstants import * | 
					
						
							| 
									
										
										
										
											1998-04-29 21:43:36 +00:00
										 |  |  | try: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     import MacOS; _MacOS = MacOS; del MacOS | 
					
						
							| 
									
										
										
										
											1998-04-29 21:43:36 +00:00
										 |  |  | except ImportError: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     _MacOS = None | 
					
						
							| 
									
										
										
										
											1995-07-14 15:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-26 21:39:48 +00:00
										 |  |  | wantobjects = 1 | 
					
						
							| 
									
										
										
										
											2002-11-26 09:28:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-09 11:51:27 +00:00
										 |  |  | TkVersion = float(_tkinter.TK_VERSION) | 
					
						
							|  |  |  | TclVersion = float(_tkinter.TCL_VERSION) | 
					
						
							| 
									
										
										
										
											1995-08-04 03:51:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-08-05 02:35:01 +00:00
										 |  |  | READABLE = _tkinter.READABLE | 
					
						
							|  |  |  | WRITABLE = _tkinter.WRITABLE | 
					
						
							|  |  |  | EXCEPTION = _tkinter.EXCEPTION | 
					
						
							| 
									
										
										
										
											1997-08-14 14:15:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # These are not always defined, e.g. not on Win32 with Tk 8.0 :-( | 
					
						
							|  |  |  | try: _tkinter.createfilehandler | 
					
						
							|  |  |  | except AttributeError: _tkinter.createfilehandler = None | 
					
						
							|  |  |  | try: _tkinter.deletefilehandler | 
					
						
							|  |  |  | except AttributeError: _tkinter.deletefilehandler = None | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | def _flatten(tuple): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal function.""" | 
					
						
							|  |  |  |     res = () | 
					
						
							|  |  |  |     for item in tuple: | 
					
						
							|  |  |  |         if type(item) in (TupleType, ListType): | 
					
						
							|  |  |  |             res = res + _flatten(item) | 
					
						
							|  |  |  |         elif item is not None: | 
					
						
							|  |  |  |             res = res + (item,) | 
					
						
							|  |  |  |     return res | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-18 18:45:50 +00:00
										 |  |  | try: _flatten = _tkinter._flatten | 
					
						
							|  |  |  | except AttributeError: pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | def _cnfmerge(cnfs): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal function.""" | 
					
						
							|  |  |  |     if type(cnfs) is DictionaryType: | 
					
						
							|  |  |  |         return cnfs | 
					
						
							|  |  |  |     elif type(cnfs) in (NoneType, StringType): | 
					
						
							|  |  |  |         return cnfs | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         cnf = {} | 
					
						
							|  |  |  |         for c in _flatten(cnfs): | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 cnf.update(c) | 
					
						
							|  |  |  |             except (AttributeError, TypeError), msg: | 
					
						
							|  |  |  |                 print "_cnfmerge: fallback due to:", msg | 
					
						
							|  |  |  |                 for k, v in c.items(): | 
					
						
							|  |  |  |                     cnf[k] = v | 
					
						
							|  |  |  |         return cnf | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-18 18:45:50 +00:00
										 |  |  | try: _cnfmerge = _tkinter._cnfmerge | 
					
						
							|  |  |  | except AttributeError: pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | class Event: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Container for the properties of an event.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Instances of this type are generated if one of the following events occurs: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     KeyPress, KeyRelease - for keyboard events | 
					
						
							|  |  |  |     ButtonPress, ButtonRelease, Motion, Enter, Leave, MouseWheel - for mouse events | 
					
						
							|  |  |  |     Visibility, Unmap, Map, Expose, FocusIn, FocusOut, Circulate, | 
					
						
							|  |  |  |     Colormap, Gravity, Reparent, Property, Destroy, Activate, | 
					
						
							|  |  |  |     Deactivate - for window events. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If a callback function for one of these events is registered | 
					
						
							|  |  |  |     using bind, bind_all, bind_class, or tag_bind, the callback is | 
					
						
							|  |  |  |     called with an Event as first argument. It will have the | 
					
						
							|  |  |  |     following attributes (in braces are the event types for which | 
					
						
							|  |  |  |     the attribute is valid): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  |         serial - serial number of event | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     num - mouse button pressed (ButtonPress, ButtonRelease) | 
					
						
							|  |  |  |     focus - whether the window has the focus (Enter, Leave) | 
					
						
							|  |  |  |     height - height of the exposed window (Configure, Expose) | 
					
						
							|  |  |  |     width - width of the exposed window (Configure, Expose) | 
					
						
							|  |  |  |     keycode - keycode of the pressed key (KeyPress, KeyRelease) | 
					
						
							|  |  |  |     state - state of the event as a number (ButtonPress, ButtonRelease, | 
					
						
							|  |  |  |                             Enter, KeyPress, KeyRelease, | 
					
						
							|  |  |  |                             Leave, Motion) | 
					
						
							|  |  |  |     state - state as a string (Visibility) | 
					
						
							|  |  |  |     time - when the event occurred | 
					
						
							|  |  |  |     x - x-position of the mouse | 
					
						
							|  |  |  |     y - y-position of the mouse | 
					
						
							|  |  |  |     x_root - x-position of the mouse on the screen | 
					
						
							|  |  |  |              (ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion) | 
					
						
							|  |  |  |     y_root - y-position of the mouse on the screen | 
					
						
							|  |  |  |              (ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion) | 
					
						
							|  |  |  |     char - pressed character (KeyPress, KeyRelease) | 
					
						
							|  |  |  |     send_event - see X/Windows documentation | 
					
						
							| 
									
										
										
										
											2005-11-09 17:12:43 +00:00
										 |  |  |     keysym - keysym of the event as a string (KeyPress, KeyRelease) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     keysym_num - keysym of the event as a number (KeyPress, KeyRelease) | 
					
						
							|  |  |  |     type - type of the event as a number | 
					
						
							|  |  |  |     widget - widget in which the event occurred | 
					
						
							|  |  |  |     delta - delta of wheel movement (MouseWheel) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     pass | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-20 20:45:49 +00:00
										 |  |  | _support_default_root = 1 | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | _default_root = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-20 20:45:49 +00:00
										 |  |  | def NoDefaultRoot(): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Inhibit setting of default root window.
 | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     Call this function to inhibit that the first instance of | 
					
						
							|  |  |  |     Tk is used for windows without an explicit parent window. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     global _support_default_root | 
					
						
							|  |  |  |     _support_default_root = 0 | 
					
						
							|  |  |  |     global _default_root | 
					
						
							|  |  |  |     _default_root = None | 
					
						
							|  |  |  |     del _default_root | 
					
						
							| 
									
										
										
										
											1998-03-20 20:45:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | def _tkerror(err): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal function.""" | 
					
						
							|  |  |  |     pass | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-07-07 13:12:12 +00:00
										 |  |  | def _exit(code='0'): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal function. Calling it will throw the exception SystemExit.""" | 
					
						
							|  |  |  |     raise SystemExit, code | 
					
						
							| 
									
										
										
										
											1994-07-07 13:12:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | _varnum = 0 | 
					
						
							|  |  |  | class Variable: | 
					
						
							| 
									
										
										
										
											2003-04-16 20:10:03 +00:00
										 |  |  |     """Class to define value holders for e.g. buttons.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Subclasses StringVar, IntVar, DoubleVar, BooleanVar are specializations | 
					
						
							|  |  |  |     that constrain the type of the value returned from get()."""
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     _default = "" | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |     def __init__(self, master=None, value=None, name=None): | 
					
						
							|  |  |  |         """Construct a variable
 | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         MASTER can be given as master widget. | 
					
						
							|  |  |  |         VALUE is an optional value (defaults to "") | 
					
						
							|  |  |  |         NAME is an optional Tcl name (defaults to PY_VARnum). | 
					
						
							|  |  |  |           | 
					
						
							|  |  |  |         If NAME matches an existing variable and VALUE is omitted | 
					
						
							|  |  |  |         then the existing value is retained. | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         global _varnum | 
					
						
							|  |  |  |         if not master: | 
					
						
							|  |  |  |             master = _default_root | 
					
						
							|  |  |  |         self._master = master | 
					
						
							|  |  |  |         self._tk = master.tk | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |         if name: | 
					
						
							|  |  |  |             self._name = name | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self._name = 'PY_VAR' + `_varnum` | 
					
						
							|  |  |  |             _varnum += 1 | 
					
						
							|  |  |  |         if value != None: | 
					
						
							|  |  |  |             self.set(value) | 
					
						
							|  |  |  |         elif not self._tk.call("info", "exists", self._name): | 
					
						
							|  |  |  |             self.set(self._default) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def __del__(self): | 
					
						
							|  |  |  |         """Unset the variable in Tcl.""" | 
					
						
							|  |  |  |         self._tk.globalunsetvar(self._name) | 
					
						
							|  |  |  |     def __str__(self): | 
					
						
							|  |  |  |         """Return the name of the variable in Tcl.""" | 
					
						
							|  |  |  |         return self._name | 
					
						
							|  |  |  |     def set(self, value): | 
					
						
							|  |  |  |         """Set the variable to VALUE.""" | 
					
						
							|  |  |  |         return self._tk.globalsetvar(self._name, value) | 
					
						
							| 
									
										
										
										
											2003-04-16 20:10:03 +00:00
										 |  |  |     def get(self): | 
					
						
							|  |  |  |         """Return value of variable.""" | 
					
						
							|  |  |  |         return self._tk.globalgetvar(self._name) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def trace_variable(self, mode, callback): | 
					
						
							|  |  |  |         """Define a trace callback for the variable.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         MODE is one of "r", "w", "u" for read, write, undefine. | 
					
						
							|  |  |  |         CALLBACK must be a function which is called when | 
					
						
							|  |  |  |         the variable is read, written or undefined. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Return the name of the callback. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         cbname = self._master._register(callback) | 
					
						
							|  |  |  |         self._tk.call("trace", "variable", self._name, mode, cbname) | 
					
						
							|  |  |  |         return cbname | 
					
						
							|  |  |  |     trace = trace_variable | 
					
						
							|  |  |  |     def trace_vdelete(self, mode, cbname): | 
					
						
							|  |  |  |         """Delete the trace callback for a variable.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         MODE is one of "r", "w", "u" for read, write, undefine. | 
					
						
							|  |  |  |         CBNAME is the name of the callback returned from trace_variable or trace. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self._tk.call("trace", "vdelete", self._name, mode, cbname) | 
					
						
							|  |  |  |         self._master.deletecommand(cbname) | 
					
						
							|  |  |  |     def trace_vinfo(self): | 
					
						
							|  |  |  |         """Return all trace callback information.""" | 
					
						
							|  |  |  |         return map(self._tk.split, self._tk.splitlist( | 
					
						
							|  |  |  |             self._tk.call("trace", "vinfo", self._name))) | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |     def __eq__(self, other): | 
					
						
							|  |  |  |         """Comparison for equality (==).
 | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         Note: if the Variable's master matters to behavior | 
					
						
							|  |  |  |         also compare self._master == other._master | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.__class__.__name__ == other.__class__.__name__ \ | 
					
						
							|  |  |  |             and self._name == other._name | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class StringVar(Variable): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Value holder for strings variables.""" | 
					
						
							|  |  |  |     _default = "" | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |     def __init__(self, master=None, value=None, name=None): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Construct a string variable.
 | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |         MASTER can be given as master widget. | 
					
						
							|  |  |  |         VALUE is an optional value (defaults to "") | 
					
						
							|  |  |  |         NAME is an optional Tcl name (defaults to PY_VARnum). | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         If NAME matches an existing variable and VALUE is omitted | 
					
						
							|  |  |  |         then the existing value is retained. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Variable.__init__(self, master, value, name) | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def get(self): | 
					
						
							|  |  |  |         """Return value of variable as string.""" | 
					
						
							| 
									
										
										
										
											2003-04-16 19:42:51 +00:00
										 |  |  |         value = self._tk.globalgetvar(self._name) | 
					
						
							|  |  |  |         if isinstance(value, basestring): | 
					
						
							|  |  |  |             return value | 
					
						
							|  |  |  |         return str(value) | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class IntVar(Variable): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Value holder for integer variables.""" | 
					
						
							|  |  |  |     _default = 0 | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |     def __init__(self, master=None, value=None, name=None): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Construct an integer variable.
 | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |         MASTER can be given as master widget. | 
					
						
							|  |  |  |         VALUE is an optional value (defaults to 0) | 
					
						
							|  |  |  |         NAME is an optional Tcl name (defaults to PY_VARnum). | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         If NAME matches an existing variable and VALUE is omitted | 
					
						
							|  |  |  |         then the existing value is retained. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Variable.__init__(self, master, value, name) | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-22 09:17:38 +00:00
										 |  |  |     def set(self, value): | 
					
						
							|  |  |  |         """Set the variable to value, converting booleans to integers.""" | 
					
						
							|  |  |  |         if isinstance(value, bool): | 
					
						
							|  |  |  |             value = int(value) | 
					
						
							|  |  |  |         return Variable.set(self, value) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def get(self): | 
					
						
							|  |  |  |         """Return the value of the variable as an integer.""" | 
					
						
							|  |  |  |         return getint(self._tk.globalgetvar(self._name)) | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class DoubleVar(Variable): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Value holder for float variables.""" | 
					
						
							|  |  |  |     _default = 0.0 | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |     def __init__(self, master=None, value=None, name=None): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Construct a float variable.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |         MASTER can be given as master widget. | 
					
						
							|  |  |  |         VALUE is an optional value (defaults to 0.0) | 
					
						
							|  |  |  |         NAME is an optional Tcl name (defaults to PY_VARnum). | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         If NAME matches an existing variable and VALUE is omitted | 
					
						
							|  |  |  |         then the existing value is retained. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Variable.__init__(self, master, value, name) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def get(self): | 
					
						
							|  |  |  |         """Return the value of the variable as a float.""" | 
					
						
							|  |  |  |         return getdouble(self._tk.globalgetvar(self._name)) | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class BooleanVar(Variable): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Value holder for boolean variables.""" | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |     _default = False | 
					
						
							|  |  |  |     def __init__(self, master=None, value=None, name=None): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Construct a boolean variable.
 | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-17 09:15:14 +00:00
										 |  |  |         MASTER can be given as master widget. | 
					
						
							|  |  |  |         VALUE is an optional value (defaults to False) | 
					
						
							|  |  |  |         NAME is an optional Tcl name (defaults to PY_VARnum). | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         If NAME matches an existing variable and VALUE is omitted | 
					
						
							|  |  |  |         then the existing value is retained. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Variable.__init__(self, master, value, name) | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def get(self): | 
					
						
							| 
									
										
										
										
											2003-04-16 19:42:51 +00:00
										 |  |  |         """Return the value of the variable as a bool.""" | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         return self._tk.getboolean(self._tk.globalgetvar(self._name)) | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-08-04 03:50:29 +00:00
										 |  |  | def mainloop(n=0): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Run the main loop of Tcl.""" | 
					
						
							|  |  |  |     _default_root.tk.mainloop(n) | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-30 17:50:36 +00:00
										 |  |  | getint = int | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-30 17:50:36 +00:00
										 |  |  | getdouble = float | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def getboolean(s): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Convert true and false to integer values 1 and 0.""" | 
					
						
							|  |  |  |     return _default_root.tk.getboolean(s) | 
					
						
							| 
									
										
										
										
											1994-07-06 09:23:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-11-07 20:38:49 +00:00
										 |  |  | # Methods defined on both toplevel and interior widgets | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | class Misc: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal class.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Base class which defines methods common for interior widgets."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # XXX font command? | 
					
						
							|  |  |  |     _tclCommands = None | 
					
						
							|  |  |  |     def destroy(self): | 
					
						
							|  |  |  |         """Internal function.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Delete all Tcl commands created for | 
					
						
							|  |  |  |         this widget in the Tcl interpreter."""
 | 
					
						
							|  |  |  |         if self._tclCommands is not None: | 
					
						
							|  |  |  |             for name in self._tclCommands: | 
					
						
							|  |  |  |                 #print '- Tkinter: deleted command', name | 
					
						
							|  |  |  |                 self.tk.deletecommand(name) | 
					
						
							|  |  |  |             self._tclCommands = None | 
					
						
							|  |  |  |     def deletecommand(self, name): | 
					
						
							|  |  |  |         """Internal function.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Delete the Tcl command provided in NAME."""
 | 
					
						
							|  |  |  |         #print '- Tkinter: deleted command', name | 
					
						
							|  |  |  |         self.tk.deletecommand(name) | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             self._tclCommands.remove(name) | 
					
						
							|  |  |  |         except ValueError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |     def tk_strictMotif(self, boolean=None): | 
					
						
							|  |  |  |         """Set Tcl internal variable, whether the look and feel
 | 
					
						
							|  |  |  |         should adhere to Motif. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A parameter of 1 means adhere to Motif (e.g. no color | 
					
						
							|  |  |  |         change if mouse passes over slider). | 
					
						
							|  |  |  |         Returns the set value."""
 | 
					
						
							|  |  |  |         return self.tk.getboolean(self.tk.call( | 
					
						
							|  |  |  |             'set', 'tk_strictMotif', boolean)) | 
					
						
							|  |  |  |     def tk_bisque(self): | 
					
						
							|  |  |  |         """Change the color scheme to light brown as used in Tk 3.6 and before.""" | 
					
						
							|  |  |  |         self.tk.call('tk_bisque') | 
					
						
							|  |  |  |     def tk_setPalette(self, *args, **kw): | 
					
						
							|  |  |  |         """Set a new color scheme for all widget elements.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A single color as argument will cause that all colors of Tk | 
					
						
							|  |  |  |         widget elements are derived from this. | 
					
						
							|  |  |  |         Alternatively several keyword parameters and its associated | 
					
						
							|  |  |  |         colors can be given. The following keywords are valid: | 
					
						
							|  |  |  |         activeBackground, foreground, selectColor, | 
					
						
							|  |  |  |         activeForeground, highlightBackground, selectBackground, | 
					
						
							|  |  |  |         background, highlightColor, selectForeground, | 
					
						
							|  |  |  |         disabledForeground, insertBackground, troughColor."""
 | 
					
						
							|  |  |  |         self.tk.call(('tk_setPalette',) | 
					
						
							|  |  |  |               + _flatten(args) + _flatten(kw.items())) | 
					
						
							|  |  |  |     def tk_menuBar(self, *args): | 
					
						
							|  |  |  |         """Do not use. Needed in Tk 3.6 and earlier.""" | 
					
						
							|  |  |  |         pass # obsolete since Tk 4.0 | 
					
						
							|  |  |  |     def wait_variable(self, name='PY_VAR'): | 
					
						
							|  |  |  |         """Wait until the variable is modified.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A parameter of type IntVar, StringVar, DoubleVar or | 
					
						
							|  |  |  |         BooleanVar must be given."""
 | 
					
						
							|  |  |  |         self.tk.call('tkwait', 'variable', name) | 
					
						
							|  |  |  |     waitvar = wait_variable # XXX b/w compat | 
					
						
							|  |  |  |     def wait_window(self, window=None): | 
					
						
							|  |  |  |         """Wait until a WIDGET is destroyed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If no parameter is given self is used."""
 | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  |         if window is None: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |             window = self | 
					
						
							|  |  |  |         self.tk.call('tkwait', 'window', window._w) | 
					
						
							|  |  |  |     def wait_visibility(self, window=None): | 
					
						
							|  |  |  |         """Wait until the visibility of a WIDGET changes
 | 
					
						
							|  |  |  |         (e.g. it appears). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If no parameter is given self is used."""
 | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  |         if window is None: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |             window = self | 
					
						
							|  |  |  |         self.tk.call('tkwait', 'visibility', window._w) | 
					
						
							|  |  |  |     def setvar(self, name='PY_VAR', value='1'): | 
					
						
							|  |  |  |         """Set Tcl variable NAME to VALUE.""" | 
					
						
							|  |  |  |         self.tk.setvar(name, value) | 
					
						
							|  |  |  |     def getvar(self, name='PY_VAR'): | 
					
						
							|  |  |  |         """Return value of Tcl variable NAME.""" | 
					
						
							|  |  |  |         return self.tk.getvar(name) | 
					
						
							|  |  |  |     getint = int | 
					
						
							|  |  |  |     getdouble = float | 
					
						
							|  |  |  |     def getboolean(self, s): | 
					
						
							| 
									
										
										
										
											2003-04-17 13:13:55 +00:00
										 |  |  |         """Return a boolean value for Tcl boolean values true and false given as parameter.""" | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         return self.tk.getboolean(s) | 
					
						
							|  |  |  |     def focus_set(self): | 
					
						
							|  |  |  |         """Direct input focus to this widget.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If the application currently does not have the focus | 
					
						
							|  |  |  |         this widget will get the focus if the application gets | 
					
						
							|  |  |  |         the focus through the window manager."""
 | 
					
						
							|  |  |  |         self.tk.call('focus', self._w) | 
					
						
							|  |  |  |     focus = focus_set # XXX b/w compat? | 
					
						
							|  |  |  |     def focus_force(self): | 
					
						
							|  |  |  |         """Direct input focus to this widget even if the
 | 
					
						
							|  |  |  |         application does not have the focus. Use with | 
					
						
							|  |  |  |         caution!"""
 | 
					
						
							|  |  |  |         self.tk.call('focus', '-force', self._w) | 
					
						
							|  |  |  |     def focus_get(self): | 
					
						
							|  |  |  |         """Return the widget which has currently the focus in the
 | 
					
						
							|  |  |  |         application. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Use focus_displayof to allow working with several | 
					
						
							|  |  |  |         displays. Return None if application does not have | 
					
						
							|  |  |  |         the focus."""
 | 
					
						
							|  |  |  |         name = self.tk.call('focus') | 
					
						
							|  |  |  |         if name == 'none' or not name: return None | 
					
						
							|  |  |  |         return self._nametowidget(name) | 
					
						
							|  |  |  |     def focus_displayof(self): | 
					
						
							|  |  |  |         """Return the widget which has currently the focus on the
 | 
					
						
							|  |  |  |         display where this widget is located. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Return None if the application does not have the focus."""
 | 
					
						
							|  |  |  |         name = self.tk.call('focus', '-displayof', self._w) | 
					
						
							|  |  |  |         if name == 'none' or not name: return None | 
					
						
							|  |  |  |         return self._nametowidget(name) | 
					
						
							|  |  |  |     def focus_lastfor(self): | 
					
						
							|  |  |  |         """Return the widget which would have the focus if top level
 | 
					
						
							|  |  |  |         for this widget gets the focus from the window manager."""
 | 
					
						
							|  |  |  |         name = self.tk.call('focus', '-lastfor', self._w) | 
					
						
							|  |  |  |         if name == 'none' or not name: return None | 
					
						
							|  |  |  |         return self._nametowidget(name) | 
					
						
							|  |  |  |     def tk_focusFollowsMouse(self): | 
					
						
							|  |  |  |         """The widget under mouse will get automatically focus. Can not
 | 
					
						
							|  |  |  |         be disabled easily."""
 | 
					
						
							|  |  |  |         self.tk.call('tk_focusFollowsMouse') | 
					
						
							|  |  |  |     def tk_focusNext(self): | 
					
						
							|  |  |  |         """Return the next widget in the focus order which follows
 | 
					
						
							|  |  |  |         widget which has currently the focus. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The focus order first goes to the next child, then to | 
					
						
							|  |  |  |         the children of the child recursively and then to the | 
					
						
							|  |  |  |         next sibling which is higher in the stacking order.  A | 
					
						
							|  |  |  |         widget is omitted if it has the takefocus resource set | 
					
						
							|  |  |  |         to 0."""
 | 
					
						
							|  |  |  |         name = self.tk.call('tk_focusNext', self._w) | 
					
						
							|  |  |  |         if not name: return None | 
					
						
							|  |  |  |         return self._nametowidget(name) | 
					
						
							|  |  |  |     def tk_focusPrev(self): | 
					
						
							|  |  |  |         """Return previous widget in the focus order. See tk_focusNext for details.""" | 
					
						
							|  |  |  |         name = self.tk.call('tk_focusPrev', self._w) | 
					
						
							|  |  |  |         if not name: return None | 
					
						
							|  |  |  |         return self._nametowidget(name) | 
					
						
							|  |  |  |     def after(self, ms, func=None, *args): | 
					
						
							|  |  |  |         """Call function once after given time.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         MS specifies the time in milliseconds. FUNC gives the | 
					
						
							|  |  |  |         function which shall be called. Additional parameters | 
					
						
							|  |  |  |         are given as parameters to the function call.  Return | 
					
						
							|  |  |  |         identifier to cancel scheduling with after_cancel."""
 | 
					
						
							|  |  |  |         if not func: | 
					
						
							|  |  |  |             # I'd rather use time.sleep(ms*0.001) | 
					
						
							|  |  |  |             self.tk.call('after', ms) | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2006-04-02 21:09:51 +00:00
										 |  |  |             def callit(): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |                 try: | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |                     func(*args) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |                 finally: | 
					
						
							|  |  |  |                     try: | 
					
						
							| 
									
										
										
										
											2006-04-02 21:09:51 +00:00
										 |  |  |                         self.deletecommand(name) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |                     except TclError: | 
					
						
							|  |  |  |                         pass | 
					
						
							|  |  |  |             name = self._register(callit) | 
					
						
							|  |  |  |             return self.tk.call('after', ms, name) | 
					
						
							|  |  |  |     def after_idle(self, func, *args): | 
					
						
							|  |  |  |         """Call FUNC once if the Tcl main loop has no event to
 | 
					
						
							|  |  |  |         process. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Return an identifier to cancel the scheduling with | 
					
						
							|  |  |  |         after_cancel."""
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         return self.after('idle', func, *args) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def after_cancel(self, id): | 
					
						
							|  |  |  |         """Cancel scheduling of function identified with ID.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Identifier returned by after or after_idle must be | 
					
						
							|  |  |  |         given as first parameter."""
 | 
					
						
							| 
									
										
										
										
											2003-06-07 19:52:38 +00:00
										 |  |  |         try: | 
					
						
							| 
									
										
										
										
											2003-07-01 21:12:47 +00:00
										 |  |  |             data = self.tk.call('after', 'info', id) | 
					
						
							|  |  |  |             # In Tk 8.3, splitlist returns: (script, type) | 
					
						
							|  |  |  |             # In Tk 8.4, splitlist may return (script, type) or (script,) | 
					
						
							|  |  |  |             script = self.tk.splitlist(data)[0] | 
					
						
							| 
									
										
										
										
											2003-06-07 19:52:38 +00:00
										 |  |  |             self.deletecommand(script) | 
					
						
							|  |  |  |         except TclError: | 
					
						
							|  |  |  |             pass | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         self.tk.call('after', 'cancel', id) | 
					
						
							|  |  |  |     def bell(self, displayof=0): | 
					
						
							|  |  |  |         """Ring a display's bell.""" | 
					
						
							|  |  |  |         self.tk.call(('bell',) + self._displayof(displayof)) | 
					
						
							| 
									
										
										
										
											2006-04-16 22:22:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     # Clipboard handling: | 
					
						
							| 
									
										
										
										
											2006-04-16 20:55:38 +00:00
										 |  |  |     def clipboard_get(self, **kw): | 
					
						
							|  |  |  |         """Retrieve data from the clipboard on window's display.
 | 
					
						
							| 
									
										
										
										
											2006-04-16 22:22:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         The window keyword defaults to the root window of the Tkinter | 
					
						
							| 
									
										
										
										
											2006-04-16 20:55:38 +00:00
										 |  |  |         application. | 
					
						
							| 
									
										
										
										
											2006-04-16 22:22:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         The type keyword specifies the form in which the data is | 
					
						
							|  |  |  |         to be returned and should be an atom name such as STRING | 
					
						
							|  |  |  |         or FILE_NAME.  Type defaults to STRING. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-16 20:55:38 +00:00
										 |  |  |         This command is equivalent to: | 
					
						
							| 
									
										
										
										
											2006-04-16 22:22:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-16 20:55:38 +00:00
										 |  |  |         selection_get(CLIPBOARD) | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(('clipboard', 'get') + self._options(kw)) | 
					
						
							| 
									
										
										
										
											2006-04-16 22:22:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def clipboard_clear(self, **kw): | 
					
						
							|  |  |  |         """Clear the data in the Tk clipboard.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A widget specified for the optional displayof keyword | 
					
						
							|  |  |  |         argument specifies the target display."""
 | 
					
						
							|  |  |  |         if not kw.has_key('displayof'): kw['displayof'] = self._w | 
					
						
							|  |  |  |         self.tk.call(('clipboard', 'clear') + self._options(kw)) | 
					
						
							|  |  |  |     def clipboard_append(self, string, **kw): | 
					
						
							|  |  |  |         """Append STRING to the Tk clipboard.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A widget specified at the optional displayof keyword | 
					
						
							|  |  |  |         argument specifies the target display. The clipboard | 
					
						
							|  |  |  |         can be retrieved with selection_get."""
 | 
					
						
							|  |  |  |         if not kw.has_key('displayof'): kw['displayof'] = self._w | 
					
						
							|  |  |  |         self.tk.call(('clipboard', 'append') + self._options(kw) | 
					
						
							|  |  |  |               + ('--', string)) | 
					
						
							|  |  |  |     # XXX grab current w/o window argument | 
					
						
							|  |  |  |     def grab_current(self): | 
					
						
							|  |  |  |         """Return widget which has currently the grab in this application
 | 
					
						
							|  |  |  |         or None."""
 | 
					
						
							|  |  |  |         name = self.tk.call('grab', 'current', self._w) | 
					
						
							|  |  |  |         if not name: return None | 
					
						
							|  |  |  |         return self._nametowidget(name) | 
					
						
							|  |  |  |     def grab_release(self): | 
					
						
							|  |  |  |         """Release grab for this widget if currently set.""" | 
					
						
							|  |  |  |         self.tk.call('grab', 'release', self._w) | 
					
						
							|  |  |  |     def grab_set(self): | 
					
						
							|  |  |  |         """Set grab for this widget.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A grab directs all events to this and descendant | 
					
						
							|  |  |  |         widgets in the application."""
 | 
					
						
							|  |  |  |         self.tk.call('grab', 'set', self._w) | 
					
						
							|  |  |  |     def grab_set_global(self): | 
					
						
							|  |  |  |         """Set global grab for this widget.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A global grab directs all events to this and | 
					
						
							|  |  |  |         descendant widgets on the display. Use with caution - | 
					
						
							|  |  |  |         other applications do not get events anymore."""
 | 
					
						
							|  |  |  |         self.tk.call('grab', 'set', '-global', self._w) | 
					
						
							|  |  |  |     def grab_status(self): | 
					
						
							|  |  |  |         """Return None, "local" or "global" if this widget has
 | 
					
						
							|  |  |  |         no, a local or a global grab."""
 | 
					
						
							|  |  |  |         status = self.tk.call('grab', 'status', self._w) | 
					
						
							|  |  |  |         if status == 'none': status = None | 
					
						
							|  |  |  |         return status | 
					
						
							|  |  |  |     def lower(self, belowThis=None): | 
					
						
							|  |  |  |         """Lower this widget in the stacking order.""" | 
					
						
							|  |  |  |         self.tk.call('lower', self._w, belowThis) | 
					
						
							|  |  |  |     def option_add(self, pattern, value, priority = None): | 
					
						
							|  |  |  |         """Set a VALUE (second parameter) for an option
 | 
					
						
							|  |  |  |         PATTERN (first parameter). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         An optional third parameter gives the numeric priority | 
					
						
							|  |  |  |         (defaults to 80)."""
 | 
					
						
							|  |  |  |         self.tk.call('option', 'add', pattern, value, priority) | 
					
						
							|  |  |  |     def option_clear(self): | 
					
						
							|  |  |  |         """Clear the option database.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         It will be reloaded if option_add is called."""
 | 
					
						
							|  |  |  |         self.tk.call('option', 'clear') | 
					
						
							|  |  |  |     def option_get(self, name, className): | 
					
						
							|  |  |  |         """Return the value for an option NAME for this widget
 | 
					
						
							|  |  |  |         with CLASSNAME. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Values with higher priority override lower values."""
 | 
					
						
							|  |  |  |         return self.tk.call('option', 'get', self._w, name, className) | 
					
						
							|  |  |  |     def option_readfile(self, fileName, priority = None): | 
					
						
							|  |  |  |         """Read file FILENAME into the option database.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         An optional second parameter gives the numeric | 
					
						
							|  |  |  |         priority."""
 | 
					
						
							|  |  |  |         self.tk.call('option', 'readfile', fileName, priority) | 
					
						
							|  |  |  |     def selection_clear(self, **kw): | 
					
						
							|  |  |  |         """Clear the current X selection.""" | 
					
						
							|  |  |  |         if not kw.has_key('displayof'): kw['displayof'] = self._w | 
					
						
							|  |  |  |         self.tk.call(('selection', 'clear') + self._options(kw)) | 
					
						
							|  |  |  |     def selection_get(self, **kw): | 
					
						
							|  |  |  |         """Return the contents of the current X selection.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A keyword parameter selection specifies the name of | 
					
						
							|  |  |  |         the selection and defaults to PRIMARY.  A keyword | 
					
						
							|  |  |  |         parameter displayof specifies a widget on the display | 
					
						
							|  |  |  |         to use."""
 | 
					
						
							|  |  |  |         if not kw.has_key('displayof'): kw['displayof'] = self._w | 
					
						
							|  |  |  |         return self.tk.call(('selection', 'get') + self._options(kw)) | 
					
						
							|  |  |  |     def selection_handle(self, command, **kw): | 
					
						
							|  |  |  |         """Specify a function COMMAND to call if the X
 | 
					
						
							|  |  |  |         selection owned by this widget is queried by another | 
					
						
							|  |  |  |         application. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         This function must return the contents of the | 
					
						
							|  |  |  |         selection. The function will be called with the | 
					
						
							|  |  |  |         arguments OFFSET and LENGTH which allows the chunking | 
					
						
							|  |  |  |         of very long selections. The following keyword | 
					
						
							|  |  |  |         parameters can be provided: | 
					
						
							|  |  |  |         selection - name of the selection (default PRIMARY), | 
					
						
							|  |  |  |         type - type of the selection (e.g. STRING, FILE_NAME)."""
 | 
					
						
							|  |  |  |         name = self._register(command) | 
					
						
							|  |  |  |         self.tk.call(('selection', 'handle') + self._options(kw) | 
					
						
							|  |  |  |               + (self._w, name)) | 
					
						
							|  |  |  |     def selection_own(self, **kw): | 
					
						
							|  |  |  |         """Become owner of X selection.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A keyword parameter selection specifies the name of | 
					
						
							|  |  |  |         the selection (default PRIMARY)."""
 | 
					
						
							|  |  |  |         self.tk.call(('selection', 'own') + | 
					
						
							|  |  |  |                  self._options(kw) + (self._w,)) | 
					
						
							|  |  |  |     def selection_own_get(self, **kw): | 
					
						
							|  |  |  |         """Return owner of X selection.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The following keyword parameter can | 
					
						
							|  |  |  |         be provided: | 
					
						
							|  |  |  |         selection - name of the selection (default PRIMARY), | 
					
						
							|  |  |  |         type - type of the selection (e.g. STRING, FILE_NAME)."""
 | 
					
						
							|  |  |  |         if not kw.has_key('displayof'): kw['displayof'] = self._w | 
					
						
							|  |  |  |         name = self.tk.call(('selection', 'own') + self._options(kw)) | 
					
						
							|  |  |  |         if not name: return None | 
					
						
							|  |  |  |         return self._nametowidget(name) | 
					
						
							|  |  |  |     def send(self, interp, cmd, *args): | 
					
						
							|  |  |  |         """Send Tcl command CMD to different interpreter INTERP to be executed.""" | 
					
						
							|  |  |  |         return self.tk.call(('send', interp, cmd) + args) | 
					
						
							|  |  |  |     def lower(self, belowThis=None): | 
					
						
							|  |  |  |         """Lower this widget in the stacking order.""" | 
					
						
							|  |  |  |         self.tk.call('lower', self._w, belowThis) | 
					
						
							|  |  |  |     def tkraise(self, aboveThis=None): | 
					
						
							|  |  |  |         """Raise this widget in the stacking order.""" | 
					
						
							|  |  |  |         self.tk.call('raise', self._w, aboveThis) | 
					
						
							|  |  |  |     lift = tkraise | 
					
						
							|  |  |  |     def colormodel(self, value=None): | 
					
						
							|  |  |  |         """Useless. Not implemented in Tk.""" | 
					
						
							|  |  |  |         return self.tk.call('tk', 'colormodel', self._w, value) | 
					
						
							|  |  |  |     def winfo_atom(self, name, displayof=0): | 
					
						
							|  |  |  |         """Return integer which represents atom NAME.""" | 
					
						
							|  |  |  |         args = ('winfo', 'atom') + self._displayof(displayof) + (name,) | 
					
						
							|  |  |  |         return getint(self.tk.call(args)) | 
					
						
							|  |  |  |     def winfo_atomname(self, id, displayof=0): | 
					
						
							|  |  |  |         """Return name of atom with identifier ID.""" | 
					
						
							|  |  |  |         args = ('winfo', 'atomname') \ | 
					
						
							|  |  |  |                + self._displayof(displayof) + (id,) | 
					
						
							|  |  |  |         return self.tk.call(args) | 
					
						
							|  |  |  |     def winfo_cells(self): | 
					
						
							|  |  |  |         """Return number of cells in the colormap for this widget.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'cells', self._w)) | 
					
						
							|  |  |  |     def winfo_children(self): | 
					
						
							|  |  |  |         """Return a list of all widgets which are children of this widget.""" | 
					
						
							| 
									
										
										
										
											2002-03-27 17:15:57 +00:00
										 |  |  |         result = [] | 
					
						
							|  |  |  |         for child in self.tk.splitlist( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'children', self._w)): | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 # Tcl sometimes returns extra windows, e.g. for | 
					
						
							|  |  |  |                 # menus; those need to be skipped | 
					
						
							|  |  |  |                 result.append(self._nametowidget(child)) | 
					
						
							|  |  |  |             except KeyError: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def winfo_class(self): | 
					
						
							|  |  |  |         """Return window class name of this widget.""" | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'class', self._w) | 
					
						
							|  |  |  |     def winfo_colormapfull(self): | 
					
						
							|  |  |  |         """Return true if at the last color request the colormap was full.""" | 
					
						
							|  |  |  |         return self.tk.getboolean( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'colormapfull', self._w)) | 
					
						
							|  |  |  |     def winfo_containing(self, rootX, rootY, displayof=0): | 
					
						
							|  |  |  |         """Return the widget which is at the root coordinates ROOTX, ROOTY.""" | 
					
						
							|  |  |  |         args = ('winfo', 'containing') \ | 
					
						
							|  |  |  |                + self._displayof(displayof) + (rootX, rootY) | 
					
						
							|  |  |  |         name = self.tk.call(args) | 
					
						
							|  |  |  |         if not name: return None | 
					
						
							|  |  |  |         return self._nametowidget(name) | 
					
						
							|  |  |  |     def winfo_depth(self): | 
					
						
							|  |  |  |         """Return the number of bits per pixel.""" | 
					
						
							|  |  |  |         return getint(self.tk.call('winfo', 'depth', self._w)) | 
					
						
							|  |  |  |     def winfo_exists(self): | 
					
						
							|  |  |  |         """Return true if this widget exists.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'exists', self._w)) | 
					
						
							|  |  |  |     def winfo_fpixels(self, number): | 
					
						
							|  |  |  |         """Return the number of pixels for the given distance NUMBER
 | 
					
						
							|  |  |  |         (e.g. "3c") as float."""
 | 
					
						
							|  |  |  |         return getdouble(self.tk.call( | 
					
						
							|  |  |  |             'winfo', 'fpixels', self._w, number)) | 
					
						
							|  |  |  |     def winfo_geometry(self): | 
					
						
							|  |  |  |         """Return geometry string for this widget in the form "widthxheight+X+Y".""" | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'geometry', self._w) | 
					
						
							|  |  |  |     def winfo_height(self): | 
					
						
							|  |  |  |         """Return height of this widget.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'height', self._w)) | 
					
						
							|  |  |  |     def winfo_id(self): | 
					
						
							|  |  |  |         """Return identifier ID for this widget.""" | 
					
						
							|  |  |  |         return self.tk.getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'id', self._w)) | 
					
						
							|  |  |  |     def winfo_interps(self, displayof=0): | 
					
						
							|  |  |  |         """Return the name of all Tcl interpreters for this display.""" | 
					
						
							|  |  |  |         args = ('winfo', 'interps') + self._displayof(displayof) | 
					
						
							|  |  |  |         return self.tk.splitlist(self.tk.call(args)) | 
					
						
							|  |  |  |     def winfo_ismapped(self): | 
					
						
							|  |  |  |         """Return true if this widget is mapped.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'ismapped', self._w)) | 
					
						
							|  |  |  |     def winfo_manager(self): | 
					
						
							|  |  |  |         """Return the window mananger name for this widget.""" | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'manager', self._w) | 
					
						
							|  |  |  |     def winfo_name(self): | 
					
						
							|  |  |  |         """Return the name of this widget.""" | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'name', self._w) | 
					
						
							|  |  |  |     def winfo_parent(self): | 
					
						
							|  |  |  |         """Return the name of the parent of this widget.""" | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'parent', self._w) | 
					
						
							|  |  |  |     def winfo_pathname(self, id, displayof=0): | 
					
						
							|  |  |  |         """Return the pathname of the widget given by ID.""" | 
					
						
							|  |  |  |         args = ('winfo', 'pathname') \ | 
					
						
							|  |  |  |                + self._displayof(displayof) + (id,) | 
					
						
							|  |  |  |         return self.tk.call(args) | 
					
						
							|  |  |  |     def winfo_pixels(self, number): | 
					
						
							|  |  |  |         """Rounded integer value of winfo_fpixels.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'pixels', self._w, number)) | 
					
						
							|  |  |  |     def winfo_pointerx(self): | 
					
						
							|  |  |  |         """Return the x coordinate of the pointer on the root window.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'pointerx', self._w)) | 
					
						
							|  |  |  |     def winfo_pointerxy(self): | 
					
						
							|  |  |  |         """Return a tuple of x and y coordinates of the pointer on the root window.""" | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'pointerxy', self._w)) | 
					
						
							|  |  |  |     def winfo_pointery(self): | 
					
						
							|  |  |  |         """Return the y coordinate of the pointer on the root window.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'pointery', self._w)) | 
					
						
							|  |  |  |     def winfo_reqheight(self): | 
					
						
							|  |  |  |         """Return requested height of this widget.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'reqheight', self._w)) | 
					
						
							|  |  |  |     def winfo_reqwidth(self): | 
					
						
							|  |  |  |         """Return requested width of this widget.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'reqwidth', self._w)) | 
					
						
							|  |  |  |     def winfo_rgb(self, color): | 
					
						
							|  |  |  |         """Return tuple of decimal values for red, green, blue for
 | 
					
						
							|  |  |  |         COLOR in this widget."""
 | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'rgb', self._w, color)) | 
					
						
							|  |  |  |     def winfo_rootx(self): | 
					
						
							|  |  |  |         """Return x coordinate of upper left corner of this widget on the
 | 
					
						
							|  |  |  |         root window."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'rootx', self._w)) | 
					
						
							|  |  |  |     def winfo_rooty(self): | 
					
						
							|  |  |  |         """Return y coordinate of upper left corner of this widget on the
 | 
					
						
							|  |  |  |         root window."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'rooty', self._w)) | 
					
						
							|  |  |  |     def winfo_screen(self): | 
					
						
							|  |  |  |         """Return the screen name of this widget.""" | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'screen', self._w) | 
					
						
							|  |  |  |     def winfo_screencells(self): | 
					
						
							|  |  |  |         """Return the number of the cells in the colormap of the screen
 | 
					
						
							|  |  |  |         of this widget."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'screencells', self._w)) | 
					
						
							|  |  |  |     def winfo_screendepth(self): | 
					
						
							|  |  |  |         """Return the number of bits per pixel of the root window of the
 | 
					
						
							|  |  |  |         screen of this widget."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'screendepth', self._w)) | 
					
						
							|  |  |  |     def winfo_screenheight(self): | 
					
						
							|  |  |  |         """Return the number of pixels of the height of the screen of this widget
 | 
					
						
							|  |  |  |         in pixel."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'screenheight', self._w)) | 
					
						
							|  |  |  |     def winfo_screenmmheight(self): | 
					
						
							|  |  |  |         """Return the number of pixels of the height of the screen of
 | 
					
						
							|  |  |  |         this widget in mm."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'screenmmheight', self._w)) | 
					
						
							|  |  |  |     def winfo_screenmmwidth(self): | 
					
						
							|  |  |  |         """Return the number of pixels of the width of the screen of
 | 
					
						
							|  |  |  |         this widget in mm."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'screenmmwidth', self._w)) | 
					
						
							|  |  |  |     def winfo_screenvisual(self): | 
					
						
							|  |  |  |         """Return one of the strings directcolor, grayscale, pseudocolor,
 | 
					
						
							|  |  |  |         staticcolor, staticgray, or truecolor for the default | 
					
						
							|  |  |  |         colormodel of this screen."""
 | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'screenvisual', self._w) | 
					
						
							|  |  |  |     def winfo_screenwidth(self): | 
					
						
							|  |  |  |         """Return the number of pixels of the width of the screen of
 | 
					
						
							|  |  |  |         this widget in pixel."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'screenwidth', self._w)) | 
					
						
							|  |  |  |     def winfo_server(self): | 
					
						
							|  |  |  |         """Return information of the X-Server of the screen of this widget in
 | 
					
						
							|  |  |  |         the form "XmajorRminor vendor vendorVersion"."""
 | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'server', self._w) | 
					
						
							|  |  |  |     def winfo_toplevel(self): | 
					
						
							|  |  |  |         """Return the toplevel widget of this widget.""" | 
					
						
							|  |  |  |         return self._nametowidget(self.tk.call( | 
					
						
							|  |  |  |             'winfo', 'toplevel', self._w)) | 
					
						
							|  |  |  |     def winfo_viewable(self): | 
					
						
							|  |  |  |         """Return true if the widget and all its higher ancestors are mapped.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'viewable', self._w)) | 
					
						
							|  |  |  |     def winfo_visual(self): | 
					
						
							|  |  |  |         """Return one of the strings directcolor, grayscale, pseudocolor,
 | 
					
						
							|  |  |  |         staticcolor, staticgray, or truecolor for the | 
					
						
							|  |  |  |         colormodel of this widget."""
 | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'visual', self._w) | 
					
						
							|  |  |  |     def winfo_visualid(self): | 
					
						
							|  |  |  |         """Return the X identifier for the visual for this widget.""" | 
					
						
							|  |  |  |         return self.tk.call('winfo', 'visualid', self._w) | 
					
						
							|  |  |  |     def winfo_visualsavailable(self, includeids=0): | 
					
						
							|  |  |  |         """Return a list of all visuals available for the screen
 | 
					
						
							|  |  |  |         of this widget. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Each item in the list consists of a visual name (see winfo_visual), a | 
					
						
							|  |  |  |         depth and if INCLUDEIDS=1 is given also the X identifier."""
 | 
					
						
							|  |  |  |         data = self.tk.split( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'visualsavailable', self._w, | 
					
						
							|  |  |  |                      includeids and 'includeids' or None)) | 
					
						
							| 
									
										
										
										
											2000-08-09 19:26:47 +00:00
										 |  |  |         if type(data) is StringType: | 
					
						
							|  |  |  |             data = [self.tk.split(data)] | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         return map(self.__winfo_parseitem, data) | 
					
						
							|  |  |  |     def __winfo_parseitem(self, t): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         return t[:1] + tuple(map(self.__winfo_getint, t[1:])) | 
					
						
							|  |  |  |     def __winfo_getint(self, x): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							| 
									
										
										
										
											2001-02-09 11:51:27 +00:00
										 |  |  |         return int(x, 0) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def winfo_vrootheight(self): | 
					
						
							|  |  |  |         """Return the height of the virtual root window associated with this
 | 
					
						
							|  |  |  |         widget in pixels. If there is no virtual root window return the | 
					
						
							|  |  |  |         height of the screen."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'vrootheight', self._w)) | 
					
						
							|  |  |  |     def winfo_vrootwidth(self): | 
					
						
							|  |  |  |         """Return the width of the virtual root window associated with this
 | 
					
						
							|  |  |  |         widget in pixel. If there is no virtual root window return the | 
					
						
							|  |  |  |         width of the screen."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'vrootwidth', self._w)) | 
					
						
							|  |  |  |     def winfo_vrootx(self): | 
					
						
							|  |  |  |         """Return the x offset of the virtual root relative to the root
 | 
					
						
							|  |  |  |         window of the screen of this widget."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'vrootx', self._w)) | 
					
						
							|  |  |  |     def winfo_vrooty(self): | 
					
						
							|  |  |  |         """Return the y offset of the virtual root relative to the root
 | 
					
						
							|  |  |  |         window of the screen of this widget."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'vrooty', self._w)) | 
					
						
							|  |  |  |     def winfo_width(self): | 
					
						
							|  |  |  |         """Return the width of this widget.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'width', self._w)) | 
					
						
							|  |  |  |     def winfo_x(self): | 
					
						
							|  |  |  |         """Return the x coordinate of the upper left corner of this widget
 | 
					
						
							|  |  |  |         in the parent."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'x', self._w)) | 
					
						
							|  |  |  |     def winfo_y(self): | 
					
						
							|  |  |  |         """Return the y coordinate of the upper left corner of this widget
 | 
					
						
							|  |  |  |         in the parent."""
 | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('winfo', 'y', self._w)) | 
					
						
							|  |  |  |     def update(self): | 
					
						
							|  |  |  |         """Enter event loop until all pending events have been processed by Tcl.""" | 
					
						
							|  |  |  |         self.tk.call('update') | 
					
						
							|  |  |  |     def update_idletasks(self): | 
					
						
							|  |  |  |         """Enter event loop until all idle callbacks have been called. This
 | 
					
						
							|  |  |  |         will update the display of windows but not process events caused by | 
					
						
							|  |  |  |         the user."""
 | 
					
						
							|  |  |  |         self.tk.call('update', 'idletasks') | 
					
						
							|  |  |  |     def bindtags(self, tagList=None): | 
					
						
							|  |  |  |         """Set or get the list of bindtags for this widget.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         With no argument return the list of all bindtags associated with | 
					
						
							|  |  |  |         this widget. With a list of strings as argument the bindtags are | 
					
						
							|  |  |  |         set to this list. The bindtags determine in which order events are | 
					
						
							|  |  |  |         processed (see bind)."""
 | 
					
						
							|  |  |  |         if tagList is None: | 
					
						
							|  |  |  |             return self.tk.splitlist( | 
					
						
							|  |  |  |                 self.tk.call('bindtags', self._w)) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.tk.call('bindtags', self._w, tagList) | 
					
						
							|  |  |  |     def _bind(self, what, sequence, func, add, needcleanup=1): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         if type(func) is StringType: | 
					
						
							|  |  |  |             self.tk.call(what + (sequence, func)) | 
					
						
							|  |  |  |         elif func: | 
					
						
							|  |  |  |             funcid = self._register(func, self._substitute, | 
					
						
							|  |  |  |                         needcleanup) | 
					
						
							|  |  |  |             cmd = ('%sif {"[%s %s]" == "break"} break\n' | 
					
						
							|  |  |  |                    % | 
					
						
							|  |  |  |                    (add and '+' or '', | 
					
						
							| 
									
										
										
										
											2001-08-09 16:57:33 +00:00
										 |  |  |                 funcid, self._subst_format_str)) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |             self.tk.call(what + (sequence, cmd)) | 
					
						
							|  |  |  |             return funcid | 
					
						
							|  |  |  |         elif sequence: | 
					
						
							|  |  |  |             return self.tk.call(what + (sequence,)) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return self.tk.splitlist(self.tk.call(what)) | 
					
						
							|  |  |  |     def bind(self, sequence=None, func=None, add=None): | 
					
						
							|  |  |  |         """Bind to this widget at event SEQUENCE a call to function FUNC.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         SEQUENCE is a string of concatenated event | 
					
						
							|  |  |  |         patterns. An event pattern is of the form | 
					
						
							|  |  |  |         <MODIFIER-MODIFIER-TYPE-DETAIL> where MODIFIER is one | 
					
						
							|  |  |  |         of Control, Mod2, M2, Shift, Mod3, M3, Lock, Mod4, M4, | 
					
						
							|  |  |  |         Button1, B1, Mod5, M5 Button2, B2, Meta, M, Button3, | 
					
						
							|  |  |  |         B3, Alt, Button4, B4, Double, Button5, B5 Triple, | 
					
						
							|  |  |  |         Mod1, M1. TYPE is one of Activate, Enter, Map, | 
					
						
							|  |  |  |         ButtonPress, Button, Expose, Motion, ButtonRelease | 
					
						
							|  |  |  |         FocusIn, MouseWheel, Circulate, FocusOut, Property, | 
					
						
							|  |  |  |         Colormap, Gravity Reparent, Configure, KeyPress, Key, | 
					
						
							|  |  |  |         Unmap, Deactivate, KeyRelease Visibility, Destroy, | 
					
						
							|  |  |  |         Leave and DETAIL is the button number for ButtonPress, | 
					
						
							|  |  |  |         ButtonRelease and DETAIL is the Keysym for KeyPress and | 
					
						
							|  |  |  |         KeyRelease. Examples are | 
					
						
							|  |  |  |         <Control-Button-1> for pressing Control and mouse button 1 or | 
					
						
							|  |  |  |         <Alt-A> for pressing A and the Alt key (KeyPress can be omitted). | 
					
						
							|  |  |  |         An event pattern can also be a virtual event of the form | 
					
						
							|  |  |  |         <<AString>> where AString can be arbitrary. This | 
					
						
							|  |  |  |         event can be generated by event_generate. | 
					
						
							|  |  |  |         If events are concatenated they must appear shortly | 
					
						
							|  |  |  |         after each other. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         FUNC will be called if the event sequence occurs with an | 
					
						
							|  |  |  |         instance of Event as argument. If the return value of FUNC is | 
					
						
							|  |  |  |         "break" no further bound function is invoked. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         An additional boolean parameter ADD specifies whether FUNC will | 
					
						
							|  |  |  |         be called additionally to the other bound function or whether | 
					
						
							|  |  |  |         it will replace the previous function. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Bind will return an identifier to allow deletion of the bound function with | 
					
						
							|  |  |  |         unbind without memory leak. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If FUNC or SEQUENCE is omitted the bound function or list | 
					
						
							|  |  |  |         of bound events are returned."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return self._bind(('bind', self._w), sequence, func, add) | 
					
						
							|  |  |  |     def unbind(self, sequence, funcid=None): | 
					
						
							|  |  |  |         """Unbind for this widget for event SEQUENCE  the
 | 
					
						
							|  |  |  |         function identified with FUNCID."""
 | 
					
						
							|  |  |  |         self.tk.call('bind', self._w, sequence, '') | 
					
						
							|  |  |  |         if funcid: | 
					
						
							|  |  |  |             self.deletecommand(funcid) | 
					
						
							|  |  |  |     def bind_all(self, sequence=None, func=None, add=None): | 
					
						
							|  |  |  |         """Bind to all widgets at an event SEQUENCE a call to function FUNC.
 | 
					
						
							|  |  |  |         An additional boolean parameter ADD specifies whether FUNC will | 
					
						
							|  |  |  |         be called additionally to the other bound function or whether | 
					
						
							|  |  |  |         it will replace the previous function. See bind for the return value."""
 | 
					
						
							|  |  |  |         return self._bind(('bind', 'all'), sequence, func, add, 0) | 
					
						
							|  |  |  |     def unbind_all(self, sequence): | 
					
						
							|  |  |  |         """Unbind for all widgets for event SEQUENCE all functions.""" | 
					
						
							|  |  |  |         self.tk.call('bind', 'all' , sequence, '') | 
					
						
							|  |  |  |     def bind_class(self, className, sequence=None, func=None, add=None): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         """Bind to widgets with bindtag CLASSNAME at event
 | 
					
						
							|  |  |  |         SEQUENCE a call of function FUNC. An additional | 
					
						
							|  |  |  |         boolean parameter ADD specifies whether FUNC will be | 
					
						
							|  |  |  |         called additionally to the other bound function or | 
					
						
							|  |  |  |         whether it will replace the previous function. See bind for | 
					
						
							|  |  |  |         the return value."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return self._bind(('bind', className), sequence, func, add, 0) | 
					
						
							|  |  |  |     def unbind_class(self, className, sequence): | 
					
						
							|  |  |  |         """Unbind for a all widgets with bindtag CLASSNAME for event SEQUENCE
 | 
					
						
							|  |  |  |         all functions."""
 | 
					
						
							|  |  |  |         self.tk.call('bind', className , sequence, '') | 
					
						
							|  |  |  |     def mainloop(self, n=0): | 
					
						
							|  |  |  |         """Call the mainloop of Tk.""" | 
					
						
							|  |  |  |         self.tk.mainloop(n) | 
					
						
							|  |  |  |     def quit(self): | 
					
						
							|  |  |  |         """Quit the Tcl interpreter. All widgets will be destroyed.""" | 
					
						
							|  |  |  |         self.tk.quit() | 
					
						
							|  |  |  |     def _getints(self, string): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         if string: | 
					
						
							|  |  |  |             return tuple(map(getint, self.tk.splitlist(string))) | 
					
						
							|  |  |  |     def _getdoubles(self, string): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         if string: | 
					
						
							|  |  |  |             return tuple(map(getdouble, self.tk.splitlist(string))) | 
					
						
							|  |  |  |     def _getboolean(self, string): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         if string: | 
					
						
							|  |  |  |             return self.tk.getboolean(string) | 
					
						
							|  |  |  |     def _displayof(self, displayof): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         if displayof: | 
					
						
							|  |  |  |             return ('-displayof', displayof) | 
					
						
							|  |  |  |         if displayof is None: | 
					
						
							|  |  |  |             return ('-displayof', self._w) | 
					
						
							|  |  |  |         return () | 
					
						
							|  |  |  |     def _options(self, cnf, kw = None): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         if kw: | 
					
						
							|  |  |  |             cnf = _cnfmerge((cnf, kw)) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             cnf = _cnfmerge(cnf) | 
					
						
							|  |  |  |         res = () | 
					
						
							|  |  |  |         for k, v in cnf.items(): | 
					
						
							|  |  |  |             if v is not None: | 
					
						
							|  |  |  |                 if k[-1] == '_': k = k[:-1] | 
					
						
							|  |  |  |                 if callable(v): | 
					
						
							|  |  |  |                     v = self._register(v) | 
					
						
							|  |  |  |                 res = res + ('-'+k, v) | 
					
						
							|  |  |  |         return res | 
					
						
							|  |  |  |     def nametowidget(self, name): | 
					
						
							|  |  |  |         """Return the Tkinter instance of a widget identified by
 | 
					
						
							|  |  |  |         its Tcl name NAME."""
 | 
					
						
							|  |  |  |         w = self | 
					
						
							|  |  |  |         if name[0] == '.': | 
					
						
							|  |  |  |             w = w._root() | 
					
						
							|  |  |  |             name = name[1:] | 
					
						
							|  |  |  |         while name: | 
					
						
							| 
									
										
										
										
											2001-02-09 11:51:27 +00:00
										 |  |  |             i = name.find('.') | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |             if i >= 0: | 
					
						
							|  |  |  |                 name, tail = name[:i], name[i+1:] | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 tail = '' | 
					
						
							|  |  |  |             w = w.children[name] | 
					
						
							|  |  |  |             name = tail | 
					
						
							|  |  |  |         return w | 
					
						
							|  |  |  |     _nametowidget = nametowidget | 
					
						
							|  |  |  |     def _register(self, func, subst=None, needcleanup=1): | 
					
						
							|  |  |  |         """Return a newly created Tcl function. If this
 | 
					
						
							|  |  |  |         function is called, the Python function FUNC will | 
					
						
							|  |  |  |         be executed. An optional function SUBST can | 
					
						
							|  |  |  |         be given which will be executed before FUNC."""
 | 
					
						
							|  |  |  |         f = CallWrapper(func, subst, self).__call__ | 
					
						
							| 
									
										
										
										
											2004-02-12 17:35:32 +00:00
										 |  |  |         name = repr(id(f)) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             func = func.im_func | 
					
						
							|  |  |  |         except AttributeError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             name = name + func.__name__ | 
					
						
							|  |  |  |         except AttributeError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         self.tk.createcommand(name, f) | 
					
						
							|  |  |  |         if needcleanup: | 
					
						
							|  |  |  |             if self._tclCommands is None: | 
					
						
							|  |  |  |                 self._tclCommands = [] | 
					
						
							|  |  |  |             self._tclCommands.append(name) | 
					
						
							|  |  |  |         #print '+ Tkinter created command', name | 
					
						
							|  |  |  |         return name | 
					
						
							|  |  |  |     register = _register | 
					
						
							|  |  |  |     def _root(self): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         w = self | 
					
						
							|  |  |  |         while w.master: w = w.master | 
					
						
							|  |  |  |         return w | 
					
						
							|  |  |  |     _subst_format = ('%#', '%b', '%f', '%h', '%k', | 
					
						
							|  |  |  |              '%s', '%t', '%w', '%x', '%y', | 
					
						
							|  |  |  |              '%A', '%E', '%K', '%N', '%W', '%T', '%X', '%Y', '%D') | 
					
						
							| 
									
										
										
										
											2001-08-09 16:57:33 +00:00
										 |  |  |     _subst_format_str = " ".join(_subst_format) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def _substitute(self, *args): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         if len(args) != len(self._subst_format): return args | 
					
						
							|  |  |  |         getboolean = self.tk.getboolean | 
					
						
							| 
									
										
										
										
											2003-03-29 09:47:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         getint = int | 
					
						
							| 
									
										
										
										
											2003-03-29 09:47:21 +00:00
										 |  |  |         def getint_event(s): | 
					
						
							|  |  |  |             """Tk changed behavior in 8.4.2, returning "??" rather more often.""" | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 return int(s) | 
					
						
							|  |  |  |             except ValueError: | 
					
						
							|  |  |  |                 return s | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         nsign, b, f, h, k, s, t, w, x, y, A, E, K, N, W, T, X, Y, D = args | 
					
						
							|  |  |  |         # Missing: (a, c, d, m, o, v, B, R) | 
					
						
							|  |  |  |         e = Event() | 
					
						
							| 
									
										
										
										
											2003-03-29 09:47:21 +00:00
										 |  |  |         # serial field: valid vor all events | 
					
						
							|  |  |  |         # number of button: ButtonPress and ButtonRelease events only | 
					
						
							|  |  |  |         # height field: Configure, ConfigureRequest, Create, | 
					
						
							|  |  |  |         # ResizeRequest, and Expose events only | 
					
						
							|  |  |  |         # keycode field: KeyPress and KeyRelease events only | 
					
						
							|  |  |  |         # time field: "valid for events that contain a time field" | 
					
						
							|  |  |  |         # width field: Configure, ConfigureRequest, Create, ResizeRequest, | 
					
						
							|  |  |  |         # and Expose events only | 
					
						
							|  |  |  |         # x field: "valid for events that contain a x field" | 
					
						
							|  |  |  |         # y field: "valid for events that contain a y field" | 
					
						
							|  |  |  |         # keysym as decimal: KeyPress and KeyRelease events only | 
					
						
							|  |  |  |         # x_root, y_root fields: ButtonPress, ButtonRelease, KeyPress, | 
					
						
							|  |  |  |         # KeyRelease,and Motion events | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         e.serial = getint(nsign) | 
					
						
							| 
									
										
										
										
											2003-03-29 09:47:21 +00:00
										 |  |  |         e.num = getint_event(b) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         try: e.focus = getboolean(f) | 
					
						
							|  |  |  |         except TclError: pass | 
					
						
							| 
									
										
										
										
											2003-03-29 09:47:21 +00:00
										 |  |  |         e.height = getint_event(h) | 
					
						
							|  |  |  |         e.keycode = getint_event(k) | 
					
						
							|  |  |  |         e.state = getint_event(s) | 
					
						
							|  |  |  |         e.time = getint_event(t) | 
					
						
							|  |  |  |         e.width = getint_event(w) | 
					
						
							|  |  |  |         e.x = getint_event(x) | 
					
						
							|  |  |  |         e.y = getint_event(y) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         e.char = A | 
					
						
							|  |  |  |         try: e.send_event = getboolean(E) | 
					
						
							|  |  |  |         except TclError: pass | 
					
						
							|  |  |  |         e.keysym = K | 
					
						
							| 
									
										
										
										
											2003-03-29 09:47:21 +00:00
										 |  |  |         e.keysym_num = getint_event(N) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         e.type = T | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             e.widget = self._nametowidget(W) | 
					
						
							|  |  |  |         except KeyError: | 
					
						
							|  |  |  |             e.widget = W | 
					
						
							| 
									
										
										
										
											2003-03-29 09:47:21 +00:00
										 |  |  |         e.x_root = getint_event(X) | 
					
						
							|  |  |  |         e.y_root = getint_event(Y) | 
					
						
							| 
									
										
										
										
											2000-09-07 15:05:09 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             e.delta = getint(D) | 
					
						
							|  |  |  |         except ValueError: | 
					
						
							|  |  |  |             e.delta = 0 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         return (e,) | 
					
						
							|  |  |  |     def _report_exception(self): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         import sys | 
					
						
							|  |  |  |         exc, val, tb = sys.exc_type, sys.exc_value, sys.exc_traceback | 
					
						
							|  |  |  |         root = self._root() | 
					
						
							|  |  |  |         root.report_callback_exception(exc, val, tb) | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |     def _configure(self, cmd, cnf, kw): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         if kw: | 
					
						
							|  |  |  |             cnf = _cnfmerge((cnf, kw)) | 
					
						
							|  |  |  |         elif cnf: | 
					
						
							|  |  |  |             cnf = _cnfmerge(cnf) | 
					
						
							|  |  |  |         if cnf is None: | 
					
						
							|  |  |  |             cnf = {} | 
					
						
							|  |  |  |             for x in self.tk.split( | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |                     self.tk.call(_flatten((self._w, cmd)))): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |                 cnf[x[0][1:]] = (x[0][1:],) + x[1:] | 
					
						
							|  |  |  |             return cnf | 
					
						
							|  |  |  |         if type(cnf) is StringType: | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |             x = self.tk.split( | 
					
						
							|  |  |  |                     self.tk.call(_flatten((self._w, cmd, '-'+cnf)))) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |             return (x[0][1:],) + x[1:] | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |         self.tk.call(_flatten((self._w, cmd)) + self._options(cnf)) | 
					
						
							|  |  |  |     # These used to be defined in Widget: | 
					
						
							|  |  |  |     def configure(self, cnf=None, **kw): | 
					
						
							|  |  |  |         """Configure resources of a widget.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The values for resources are specified as keyword | 
					
						
							|  |  |  |         arguments. To get an overview about | 
					
						
							|  |  |  |         the allowed keyword arguments call the method keys. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self._configure('configure', cnf, kw) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     config = configure | 
					
						
							|  |  |  |     def cget(self, key): | 
					
						
							|  |  |  |         """Return the resource value for a KEY given as string.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'cget', '-' + key) | 
					
						
							|  |  |  |     __getitem__ = cget | 
					
						
							|  |  |  |     def __setitem__(self, key, value): | 
					
						
							|  |  |  |         self.configure({key: value}) | 
					
						
							|  |  |  |     def keys(self): | 
					
						
							|  |  |  |         """Return a list of all resource names of this widget.""" | 
					
						
							|  |  |  |         return map(lambda x: x[0][1:], | 
					
						
							|  |  |  |                self.tk.split(self.tk.call(self._w, 'configure'))) | 
					
						
							|  |  |  |     def __str__(self): | 
					
						
							|  |  |  |         """Return the window path name of this widget.""" | 
					
						
							|  |  |  |         return self._w | 
					
						
							|  |  |  |     # Pack methods that apply to the master | 
					
						
							|  |  |  |     _noarg_ = ['_noarg_'] | 
					
						
							|  |  |  |     def pack_propagate(self, flag=_noarg_): | 
					
						
							|  |  |  |         """Set or get the status for propagation of geometry information.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A boolean argument specifies whether the geometry information | 
					
						
							|  |  |  |         of the slaves will determine the size of this widget. If no argument | 
					
						
							|  |  |  |         is given the current setting will be returned. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         if flag is Misc._noarg_: | 
					
						
							|  |  |  |             return self._getboolean(self.tk.call( | 
					
						
							|  |  |  |                 'pack', 'propagate', self._w)) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.tk.call('pack', 'propagate', self._w, flag) | 
					
						
							|  |  |  |     propagate = pack_propagate | 
					
						
							|  |  |  |     def pack_slaves(self): | 
					
						
							|  |  |  |         """Return a list of all slaves of this widget
 | 
					
						
							|  |  |  |         in its packing order."""
 | 
					
						
							|  |  |  |         return map(self._nametowidget, | 
					
						
							|  |  |  |                self.tk.splitlist( | 
					
						
							|  |  |  |                    self.tk.call('pack', 'slaves', self._w))) | 
					
						
							|  |  |  |     slaves = pack_slaves | 
					
						
							|  |  |  |     # Place method that applies to the master | 
					
						
							|  |  |  |     def place_slaves(self): | 
					
						
							|  |  |  |         """Return a list of all slaves of this widget
 | 
					
						
							|  |  |  |         in its packing order."""
 | 
					
						
							|  |  |  |         return map(self._nametowidget, | 
					
						
							|  |  |  |                self.tk.splitlist( | 
					
						
							|  |  |  |                    self.tk.call( | 
					
						
							|  |  |  |                        'place', 'slaves', self._w))) | 
					
						
							|  |  |  |     # Grid methods that apply to the master | 
					
						
							|  |  |  |     def grid_bbox(self, column=None, row=None, col2=None, row2=None): | 
					
						
							|  |  |  |         """Return a tuple of integer coordinates for the bounding
 | 
					
						
							|  |  |  |         box of this widget controlled by the geometry manager grid. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If COLUMN, ROW is given the bounding box applies from | 
					
						
							|  |  |  |         the cell with row and column 0 to the specified | 
					
						
							|  |  |  |         cell. If COL2 and ROW2 are given the bounding box | 
					
						
							|  |  |  |         starts at that cell. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The returned integers specify the offset of the upper left | 
					
						
							|  |  |  |         corner in the master widget and the width and height. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         args = ('grid', 'bbox', self._w) | 
					
						
							|  |  |  |         if column is not None and row is not None: | 
					
						
							|  |  |  |             args = args + (column, row) | 
					
						
							|  |  |  |         if col2 is not None and row2 is not None: | 
					
						
							|  |  |  |             args = args + (col2, row2) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         return self._getints(self.tk.call(*args)) or None | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     bbox = grid_bbox | 
					
						
							|  |  |  |     def _grid_configure(self, command, index, cnf, kw): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         if type(cnf) is StringType and not kw: | 
					
						
							|  |  |  |             if cnf[-1:] == '_': | 
					
						
							|  |  |  |                 cnf = cnf[:-1] | 
					
						
							|  |  |  |             if cnf[:1] != '-': | 
					
						
							|  |  |  |                 cnf = '-'+cnf | 
					
						
							|  |  |  |             options = (cnf,) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             options = self._options(cnf, kw) | 
					
						
							|  |  |  |         if not options: | 
					
						
							|  |  |  |             res = self.tk.call('grid', | 
					
						
							|  |  |  |                        command, self._w, index) | 
					
						
							|  |  |  |             words = self.tk.splitlist(res) | 
					
						
							|  |  |  |             dict = {} | 
					
						
							|  |  |  |             for i in range(0, len(words), 2): | 
					
						
							|  |  |  |                 key = words[i][1:] | 
					
						
							|  |  |  |                 value = words[i+1] | 
					
						
							|  |  |  |                 if not value: | 
					
						
							|  |  |  |                     value = None | 
					
						
							|  |  |  |                 elif '.' in value: | 
					
						
							|  |  |  |                     value = getdouble(value) | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     value = getint(value) | 
					
						
							|  |  |  |                 dict[key] = value | 
					
						
							|  |  |  |             return dict | 
					
						
							|  |  |  |         res = self.tk.call( | 
					
						
							|  |  |  |                   ('grid', command, self._w, index) | 
					
						
							|  |  |  |                   + options) | 
					
						
							|  |  |  |         if len(options) == 1: | 
					
						
							|  |  |  |             if not res: return None | 
					
						
							|  |  |  |             # In Tk 7.5, -width can be a float | 
					
						
							|  |  |  |             if '.' in res: return getdouble(res) | 
					
						
							|  |  |  |             return getint(res) | 
					
						
							|  |  |  |     def grid_columnconfigure(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Configure column INDEX of a grid.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resources are minsize (minimum size of the column), | 
					
						
							|  |  |  |         weight (how much does additional space propagate to this column) | 
					
						
							|  |  |  |         and pad (how much space to let additionally)."""
 | 
					
						
							|  |  |  |         return self._grid_configure('columnconfigure', index, cnf, kw) | 
					
						
							|  |  |  |     columnconfigure = grid_columnconfigure | 
					
						
							| 
									
										
										
										
											2001-10-13 09:33:51 +00:00
										 |  |  |     def grid_location(self, x, y): | 
					
						
							|  |  |  |         """Return a tuple of column and row which identify the cell
 | 
					
						
							|  |  |  |         at which the pixel at position X and Y inside the master | 
					
						
							|  |  |  |         widget is located."""
 | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call( | 
					
						
							|  |  |  |                 'grid', 'location', self._w, x, y)) or None | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def grid_propagate(self, flag=_noarg_): | 
					
						
							|  |  |  |         """Set or get the status for propagation of geometry information.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A boolean argument specifies whether the geometry information | 
					
						
							|  |  |  |         of the slaves will determine the size of this widget. If no argument | 
					
						
							|  |  |  |         is given, the current setting will be returned. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         if flag is Misc._noarg_: | 
					
						
							|  |  |  |             return self._getboolean(self.tk.call( | 
					
						
							|  |  |  |                 'grid', 'propagate', self._w)) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.tk.call('grid', 'propagate', self._w, flag) | 
					
						
							|  |  |  |     def grid_rowconfigure(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Configure row INDEX of a grid.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resources are minsize (minimum size of the row), | 
					
						
							|  |  |  |         weight (how much does additional space propagate to this row) | 
					
						
							|  |  |  |         and pad (how much space to let additionally)."""
 | 
					
						
							|  |  |  |         return self._grid_configure('rowconfigure', index, cnf, kw) | 
					
						
							|  |  |  |     rowconfigure = grid_rowconfigure | 
					
						
							|  |  |  |     def grid_size(self): | 
					
						
							|  |  |  |         """Return a tuple of the number of column and rows in the grid.""" | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call('grid', 'size', self._w)) or None | 
					
						
							|  |  |  |     size = grid_size | 
					
						
							|  |  |  |     def grid_slaves(self, row=None, column=None): | 
					
						
							|  |  |  |         """Return a list of all slaves of this widget
 | 
					
						
							|  |  |  |         in its packing order."""
 | 
					
						
							|  |  |  |         args = () | 
					
						
							|  |  |  |         if row is not None: | 
					
						
							|  |  |  |             args = args + ('-row', row) | 
					
						
							|  |  |  |         if column is not None: | 
					
						
							|  |  |  |             args = args + ('-column', column) | 
					
						
							|  |  |  |         return map(self._nametowidget, | 
					
						
							|  |  |  |                self.tk.splitlist(self.tk.call( | 
					
						
							|  |  |  |                    ('grid', 'slaves', self._w) + args))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Support for the "event" command, new in Tk 4.2. | 
					
						
							|  |  |  |     # By Case Roole. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def event_add(self, virtual, *sequences): | 
					
						
							|  |  |  |         """Bind a virtual event VIRTUAL (of the form <<Name>>)
 | 
					
						
							|  |  |  |         to an event SEQUENCE such that the virtual event is triggered | 
					
						
							|  |  |  |         whenever SEQUENCE occurs."""
 | 
					
						
							|  |  |  |         args = ('event', 'add', virtual) + sequences | 
					
						
							|  |  |  |         self.tk.call(args) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def event_delete(self, virtual, *sequences): | 
					
						
							|  |  |  |         """Unbind a virtual event VIRTUAL from SEQUENCE.""" | 
					
						
							|  |  |  |         args = ('event', 'delete', virtual) + sequences | 
					
						
							|  |  |  |         self.tk.call(args) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def event_generate(self, sequence, **kw): | 
					
						
							|  |  |  |         """Generate an event SEQUENCE. Additional
 | 
					
						
							|  |  |  |         keyword arguments specify parameter of the event | 
					
						
							|  |  |  |         (e.g. x, y, rootx, rooty)."""
 | 
					
						
							|  |  |  |         args = ('event', 'generate', self._w, sequence) | 
					
						
							|  |  |  |         for k, v in kw.items(): | 
					
						
							|  |  |  |             args = args + ('-%s' % k, str(v)) | 
					
						
							|  |  |  |         self.tk.call(args) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def event_info(self, virtual=None): | 
					
						
							|  |  |  |         """Return a list of all virtual events or the information
 | 
					
						
							|  |  |  |         about the SEQUENCE bound to the virtual event VIRTUAL."""
 | 
					
						
							|  |  |  |         return self.tk.splitlist( | 
					
						
							|  |  |  |             self.tk.call('event', 'info', virtual)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Image related commands | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def image_names(self): | 
					
						
							|  |  |  |         """Return a list of all existing image names.""" | 
					
						
							|  |  |  |         return self.tk.call('image', 'names') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def image_types(self): | 
					
						
							|  |  |  |         """Return a list of all available image types (e.g. phote bitmap).""" | 
					
						
							|  |  |  |         return self.tk.call('image', 'types') | 
					
						
							| 
									
										
										
										
											1998-04-10 19:16:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-02 19:51:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-09-07 19:22:00 +00:00
										 |  |  | class CallWrapper: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal class. Stores function to call when some user
 | 
					
						
							|  |  |  |     defined Tcl function is called e.g. after an event occurred."""
 | 
					
						
							|  |  |  |     def __init__(self, func, subst, widget): | 
					
						
							|  |  |  |         """Store FUNC, SUBST and WIDGET as members.""" | 
					
						
							|  |  |  |         self.func = func | 
					
						
							|  |  |  |         self.subst = subst | 
					
						
							|  |  |  |         self.widget = widget | 
					
						
							|  |  |  |     def __call__(self, *args): | 
					
						
							|  |  |  |         """Apply first function SUBST to arguments, than FUNC.""" | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             if self.subst: | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |                 args = self.subst(*args) | 
					
						
							|  |  |  |             return self.func(*args) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         except SystemExit, msg: | 
					
						
							|  |  |  |             raise SystemExit, msg | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             self.widget._report_exception() | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-05-01 19:48:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | class Wm: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Provides functions for the communication with the window manager.""" | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def wm_aspect(self, | 
					
						
							|  |  |  |               minNumer=None, minDenom=None, | 
					
						
							|  |  |  |               maxNumer=None, maxDenom=None): | 
					
						
							|  |  |  |         """Instruct the window manager to set the aspect ratio (width/height)
 | 
					
						
							|  |  |  |         of this widget to be between MINNUMER/MINDENOM and MAXNUMER/MAXDENOM. Return a tuple | 
					
						
							|  |  |  |         of the actual values if no argument is given."""
 | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call('wm', 'aspect', self._w, | 
					
						
							|  |  |  |                      minNumer, minDenom, | 
					
						
							|  |  |  |                      maxNumer, maxDenom)) | 
					
						
							|  |  |  |     aspect = wm_aspect | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def wm_attributes(self, *args): | 
					
						
							|  |  |  |         """This subcommand returns or sets platform specific attributes
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         The first form returns a list of the platform specific flags and | 
					
						
							|  |  |  |         their values. The second form returns the value for the specific | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         option. The third form sets one or more of the values. The values | 
					
						
							|  |  |  |         are as follows: | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         On Windows, -disabled gets or sets whether the window is in a | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         disabled state. -toolwindow gets or sets the style of the window | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         to toolwindow (as defined in the MSDN). -topmost gets or sets | 
					
						
							|  |  |  |         whether this is a topmost window (displays above all other | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         windows). | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         On Macintosh, XXXXX | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         On Unix, there are currently no special attribute values. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         args = ('wm', 'attributes', self._w) + args | 
					
						
							|  |  |  |         return self.tk.call(args) | 
					
						
							|  |  |  |     attributes=wm_attributes | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def wm_client(self, name=None): | 
					
						
							|  |  |  |         """Store NAME in WM_CLIENT_MACHINE property of this widget. Return
 | 
					
						
							|  |  |  |         current value."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'client', self._w, name) | 
					
						
							|  |  |  |     client = wm_client | 
					
						
							|  |  |  |     def wm_colormapwindows(self, *wlist): | 
					
						
							|  |  |  |         """Store list of window names (WLIST) into WM_COLORMAPWINDOWS property
 | 
					
						
							|  |  |  |         of this widget. This list contains windows whose colormaps differ from their | 
					
						
							|  |  |  |         parents. Return current list of widgets if WLIST is empty."""
 | 
					
						
							|  |  |  |         if len(wlist) > 1: | 
					
						
							|  |  |  |             wlist = (wlist,) # Tk needs a list of windows here | 
					
						
							|  |  |  |         args = ('wm', 'colormapwindows', self._w) + wlist | 
					
						
							|  |  |  |         return map(self._nametowidget, self.tk.call(args)) | 
					
						
							|  |  |  |     colormapwindows = wm_colormapwindows | 
					
						
							|  |  |  |     def wm_command(self, value=None): | 
					
						
							|  |  |  |         """Store VALUE in WM_COMMAND property. It is the command
 | 
					
						
							|  |  |  |         which shall be used to invoke the application. Return current | 
					
						
							|  |  |  |         command if VALUE is None."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'command', self._w, value) | 
					
						
							|  |  |  |     command = wm_command | 
					
						
							|  |  |  |     def wm_deiconify(self): | 
					
						
							|  |  |  |         """Deiconify this widget. If it was never mapped it will not be mapped.
 | 
					
						
							|  |  |  |         On Windows it will raise this widget and give it the focus."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'deiconify', self._w) | 
					
						
							|  |  |  |     deiconify = wm_deiconify | 
					
						
							|  |  |  |     def wm_focusmodel(self, model=None): | 
					
						
							|  |  |  |         """Set focus model to MODEL. "active" means that this widget will claim
 | 
					
						
							|  |  |  |         the focus itself, "passive" means that the window manager shall give | 
					
						
							|  |  |  |         the focus. Return current focus model if MODEL is None."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'focusmodel', self._w, model) | 
					
						
							|  |  |  |     focusmodel = wm_focusmodel | 
					
						
							|  |  |  |     def wm_frame(self): | 
					
						
							|  |  |  |         """Return identifier for decorative frame of this widget if present.""" | 
					
						
							|  |  |  |         return self.tk.call('wm', 'frame', self._w) | 
					
						
							|  |  |  |     frame = wm_frame | 
					
						
							|  |  |  |     def wm_geometry(self, newGeometry=None): | 
					
						
							|  |  |  |         """Set geometry to NEWGEOMETRY of the form =widthxheight+x+y. Return
 | 
					
						
							|  |  |  |         current value if None is given."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'geometry', self._w, newGeometry) | 
					
						
							|  |  |  |     geometry = wm_geometry | 
					
						
							|  |  |  |     def wm_grid(self, | 
					
						
							|  |  |  |          baseWidth=None, baseHeight=None, | 
					
						
							|  |  |  |          widthInc=None, heightInc=None): | 
					
						
							|  |  |  |         """Instruct the window manager that this widget shall only be
 | 
					
						
							|  |  |  |         resized on grid boundaries. WIDTHINC and HEIGHTINC are the width and | 
					
						
							|  |  |  |         height of a grid unit in pixels. BASEWIDTH and BASEHEIGHT are the | 
					
						
							|  |  |  |         number of grid units requested in Tk_GeometryRequest."""
 | 
					
						
							|  |  |  |         return self._getints(self.tk.call( | 
					
						
							|  |  |  |             'wm', 'grid', self._w, | 
					
						
							|  |  |  |             baseWidth, baseHeight, widthInc, heightInc)) | 
					
						
							|  |  |  |     grid = wm_grid | 
					
						
							|  |  |  |     def wm_group(self, pathName=None): | 
					
						
							|  |  |  |         """Set the group leader widgets for related widgets to PATHNAME. Return
 | 
					
						
							|  |  |  |         the group leader of this widget if None is given."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'group', self._w, pathName) | 
					
						
							|  |  |  |     group = wm_group | 
					
						
							| 
									
										
										
										
											2006-06-17 09:20:41 +00:00
										 |  |  |     def wm_iconbitmap(self, bitmap=None, default=None): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Set bitmap for the iconified widget to BITMAP. Return
 | 
					
						
							| 
									
										
										
										
											2006-06-17 09:20:41 +00:00
										 |  |  |         the bitmap if None is given. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Under Windows, the DEFAULT parameter can be used to set the icon  | 
					
						
							|  |  |  |         for the widget and any descendents that don't have an icon set | 
					
						
							| 
									
										
										
										
											2006-06-17 22:37:45 +00:00
										 |  |  |         explicitly.  DEFAULT can be the relative path to a .ico file | 
					
						
							| 
									
										
										
										
											2006-06-17 09:20:41 +00:00
										 |  |  |         (example: root.iconbitmap(default='myicon.ico') ).  See Tk | 
					
						
							|  |  |  |         documentation for more information."""
 | 
					
						
							|  |  |  |         if default: | 
					
						
							|  |  |  |             return self.tk.call('wm', 'iconbitmap', self._w, '-default', default) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return self.tk.call('wm', 'iconbitmap', self._w, bitmap) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     iconbitmap = wm_iconbitmap | 
					
						
							|  |  |  |     def wm_iconify(self): | 
					
						
							|  |  |  |         """Display widget as icon.""" | 
					
						
							|  |  |  |         return self.tk.call('wm', 'iconify', self._w) | 
					
						
							|  |  |  |     iconify = wm_iconify | 
					
						
							|  |  |  |     def wm_iconmask(self, bitmap=None): | 
					
						
							|  |  |  |         """Set mask for the icon bitmap of this widget. Return the
 | 
					
						
							|  |  |  |         mask if None is given."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'iconmask', self._w, bitmap) | 
					
						
							|  |  |  |     iconmask = wm_iconmask | 
					
						
							|  |  |  |     def wm_iconname(self, newName=None): | 
					
						
							|  |  |  |         """Set the name of the icon for this widget. Return the name if
 | 
					
						
							|  |  |  |         None is given."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'iconname', self._w, newName) | 
					
						
							|  |  |  |     iconname = wm_iconname | 
					
						
							|  |  |  |     def wm_iconposition(self, x=None, y=None): | 
					
						
							|  |  |  |         """Set the position of the icon of this widget to X and Y. Return
 | 
					
						
							|  |  |  |         a tuple of the current values of X and X if None is given."""
 | 
					
						
							|  |  |  |         return self._getints(self.tk.call( | 
					
						
							|  |  |  |             'wm', 'iconposition', self._w, x, y)) | 
					
						
							|  |  |  |     iconposition = wm_iconposition | 
					
						
							|  |  |  |     def wm_iconwindow(self, pathName=None): | 
					
						
							|  |  |  |         """Set widget PATHNAME to be displayed instead of icon. Return the current
 | 
					
						
							|  |  |  |         value if None is given."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'iconwindow', self._w, pathName) | 
					
						
							|  |  |  |     iconwindow = wm_iconwindow | 
					
						
							|  |  |  |     def wm_maxsize(self, width=None, height=None): | 
					
						
							|  |  |  |         """Set max WIDTH and HEIGHT for this widget. If the window is gridded
 | 
					
						
							|  |  |  |         the values are given in grid units. Return the current values if None | 
					
						
							|  |  |  |         is given."""
 | 
					
						
							|  |  |  |         return self._getints(self.tk.call( | 
					
						
							|  |  |  |             'wm', 'maxsize', self._w, width, height)) | 
					
						
							|  |  |  |     maxsize = wm_maxsize | 
					
						
							|  |  |  |     def wm_minsize(self, width=None, height=None): | 
					
						
							|  |  |  |         """Set min WIDTH and HEIGHT for this widget. If the window is gridded
 | 
					
						
							|  |  |  |         the values are given in grid units. Return the current values if None | 
					
						
							|  |  |  |         is given."""
 | 
					
						
							|  |  |  |         return self._getints(self.tk.call( | 
					
						
							|  |  |  |             'wm', 'minsize', self._w, width, height)) | 
					
						
							|  |  |  |     minsize = wm_minsize | 
					
						
							|  |  |  |     def wm_overrideredirect(self, boolean=None): | 
					
						
							|  |  |  |         """Instruct the window manager to ignore this widget
 | 
					
						
							|  |  |  |         if BOOLEAN is given with 1. Return the current value if None | 
					
						
							|  |  |  |         is given."""
 | 
					
						
							|  |  |  |         return self._getboolean(self.tk.call( | 
					
						
							|  |  |  |             'wm', 'overrideredirect', self._w, boolean)) | 
					
						
							|  |  |  |     overrideredirect = wm_overrideredirect | 
					
						
							|  |  |  |     def wm_positionfrom(self, who=None): | 
					
						
							|  |  |  |         """Instruct the window manager that the position of this widget shall
 | 
					
						
							|  |  |  |         be defined by the user if WHO is "user", and by its own policy if WHO is | 
					
						
							|  |  |  |         "program"."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'positionfrom', self._w, who) | 
					
						
							|  |  |  |     positionfrom = wm_positionfrom | 
					
						
							|  |  |  |     def wm_protocol(self, name=None, func=None): | 
					
						
							|  |  |  |         """Bind function FUNC to command NAME for this widget.
 | 
					
						
							|  |  |  |         Return the function bound to NAME if None is given. NAME could be | 
					
						
							|  |  |  |         e.g. "WM_SAVE_YOURSELF" or "WM_DELETE_WINDOW"."""
 | 
					
						
							|  |  |  |         if callable(func): | 
					
						
							|  |  |  |             command = self._register(func) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             command = func | 
					
						
							|  |  |  |         return self.tk.call( | 
					
						
							|  |  |  |             'wm', 'protocol', self._w, name, command) | 
					
						
							|  |  |  |     protocol = wm_protocol | 
					
						
							|  |  |  |     def wm_resizable(self, width=None, height=None): | 
					
						
							|  |  |  |         """Instruct the window manager whether this width can be resized
 | 
					
						
							|  |  |  |         in WIDTH or HEIGHT. Both values are boolean values."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'resizable', self._w, width, height) | 
					
						
							|  |  |  |     resizable = wm_resizable | 
					
						
							|  |  |  |     def wm_sizefrom(self, who=None): | 
					
						
							|  |  |  |         """Instruct the window manager that the size of this widget shall
 | 
					
						
							|  |  |  |         be defined by the user if WHO is "user", and by its own policy if WHO is | 
					
						
							|  |  |  |         "program"."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'sizefrom', self._w, who) | 
					
						
							|  |  |  |     sizefrom = wm_sizefrom | 
					
						
							| 
									
										
										
										
											2000-08-09 19:11:59 +00:00
										 |  |  |     def wm_state(self, newstate=None): | 
					
						
							|  |  |  |         """Query or set the state of this widget as one of normal, icon,
 | 
					
						
							|  |  |  |         iconic (see wm_iconwindow), withdrawn, or zoomed (Windows only)."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'state', self._w, newstate) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     state = wm_state | 
					
						
							|  |  |  |     def wm_title(self, string=None): | 
					
						
							|  |  |  |         """Set the title of this widget.""" | 
					
						
							|  |  |  |         return self.tk.call('wm', 'title', self._w, string) | 
					
						
							|  |  |  |     title = wm_title | 
					
						
							|  |  |  |     def wm_transient(self, master=None): | 
					
						
							|  |  |  |         """Instruct the window manager that this widget is transient
 | 
					
						
							|  |  |  |         with regard to widget MASTER."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'transient', self._w, master) | 
					
						
							|  |  |  |     transient = wm_transient | 
					
						
							|  |  |  |     def wm_withdraw(self): | 
					
						
							|  |  |  |         """Withdraw this widget from the screen such that it is unmapped
 | 
					
						
							|  |  |  |         and forgotten by the window manager. Re-draw it with wm_deiconify."""
 | 
					
						
							|  |  |  |         return self.tk.call('wm', 'withdraw', self._w) | 
					
						
							|  |  |  |     withdraw = wm_withdraw | 
					
						
							| 
									
										
										
										
											1998-05-01 19:48:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Tk(Misc, Wm): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Toplevel widget of Tk which represents mostly the main window
 | 
					
						
							|  |  |  |     of an appliation. It has an associated Tcl interpreter."""
 | 
					
						
							|  |  |  |     _w = '.' | 
					
						
							| 
									
										
										
										
											2004-08-03 18:36:25 +00:00
										 |  |  |     def __init__(self, screenName=None, baseName=None, className='Tk', | 
					
						
							|  |  |  |                  useTk=1, sync=0, use=None): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Return a new Toplevel widget on screen SCREENNAME. A new Tcl interpreter will
 | 
					
						
							|  |  |  |         be created. BASENAME will be used for the identification of the profile file (see | 
					
						
							|  |  |  |         readprofile). | 
					
						
							|  |  |  |         It is constructed from sys.argv[0] without extensions if None is given. CLASSNAME | 
					
						
							|  |  |  |         is the name of the widget class."""
 | 
					
						
							|  |  |  |         self.master = None | 
					
						
							|  |  |  |         self.children = {} | 
					
						
							| 
									
										
										
										
											2004-02-18 05:59:53 +00:00
										 |  |  |         self._tkloaded = 0 | 
					
						
							|  |  |  |         # to avoid recursions in the getattr code in case of failure, we | 
					
						
							|  |  |  |         # ensure that self.tk is always _something_. | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |         self.tk = None | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         if baseName is None: | 
					
						
							|  |  |  |             import sys, os | 
					
						
							|  |  |  |             baseName = os.path.basename(sys.argv[0]) | 
					
						
							|  |  |  |             baseName, ext = os.path.splitext(baseName) | 
					
						
							|  |  |  |             if ext not in ('.py', '.pyc', '.pyo'): | 
					
						
							|  |  |  |                 baseName = baseName + ext | 
					
						
							| 
									
										
										
										
											2004-02-18 05:59:53 +00:00
										 |  |  |         interactive = 0 | 
					
						
							| 
									
										
										
										
											2004-08-03 18:36:25 +00:00
										 |  |  |         self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) | 
					
						
							| 
									
										
										
										
											2004-02-18 05:59:53 +00:00
										 |  |  |         if useTk: | 
					
						
							|  |  |  |             self._loadtk() | 
					
						
							|  |  |  |         self.readprofile(baseName, className) | 
					
						
							|  |  |  |     def loadtk(self): | 
					
						
							|  |  |  |         if not self._tkloaded: | 
					
						
							|  |  |  |             self.tk.loadtk() | 
					
						
							|  |  |  |             self._loadtk() | 
					
						
							|  |  |  |     def _loadtk(self): | 
					
						
							|  |  |  |         self._tkloaded = 1 | 
					
						
							|  |  |  |         global _default_root | 
					
						
							| 
									
										
										
										
											2001-08-23 13:25:59 +00:00
										 |  |  |         if _MacOS and hasattr(_MacOS, 'SchedParams'): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |             # Disable event scanning except for Command-Period | 
					
						
							|  |  |  |             _MacOS.SchedParams(1, 0) | 
					
						
							|  |  |  |             # Work around nasty MacTk bug | 
					
						
							|  |  |  |             # XXX Is this one still needed? | 
					
						
							|  |  |  |             self.update() | 
					
						
							|  |  |  |         # Version sanity checks | 
					
						
							|  |  |  |         tk_version = self.tk.getvar('tk_version') | 
					
						
							|  |  |  |         if tk_version != _tkinter.TK_VERSION: | 
					
						
							|  |  |  |             raise RuntimeError, \ | 
					
						
							|  |  |  |             "tk.h version (%s) doesn't match libtk.a version (%s)" \ | 
					
						
							|  |  |  |             % (_tkinter.TK_VERSION, tk_version) | 
					
						
							| 
									
										
										
										
											2003-05-24 11:37:15 +00:00
										 |  |  |         # Under unknown circumstances, tcl_version gets coerced to float | 
					
						
							|  |  |  |         tcl_version = str(self.tk.getvar('tcl_version')) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         if tcl_version != _tkinter.TCL_VERSION: | 
					
						
							|  |  |  |             raise RuntimeError, \ | 
					
						
							|  |  |  |             "tcl.h version (%s) doesn't match libtcl.a version (%s)" \ | 
					
						
							|  |  |  |             % (_tkinter.TCL_VERSION, tcl_version) | 
					
						
							|  |  |  |         if TkVersion < 4.0: | 
					
						
							|  |  |  |             raise RuntimeError, \ | 
					
						
							|  |  |  |             "Tk 4.0 or higher is required; found Tk %s" \ | 
					
						
							|  |  |  |             % str(TkVersion) | 
					
						
							| 
									
										
										
										
											2005-03-01 08:09:28 +00:00
										 |  |  |         # Create and register the tkerror and exit commands | 
					
						
							|  |  |  |         # We need to inline parts of _register here, _ register | 
					
						
							|  |  |  |         # would register differently-named commands. | 
					
						
							|  |  |  |         if self._tclCommands is None: | 
					
						
							|  |  |  |             self._tclCommands = [] | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         self.tk.createcommand('tkerror', _tkerror) | 
					
						
							|  |  |  |         self.tk.createcommand('exit', _exit) | 
					
						
							| 
									
										
										
										
											2005-03-01 08:09:28 +00:00
										 |  |  |         self._tclCommands.append('tkerror') | 
					
						
							|  |  |  |         self._tclCommands.append('exit') | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         if _support_default_root and not _default_root: | 
					
						
							|  |  |  |             _default_root = self | 
					
						
							|  |  |  |         self.protocol("WM_DELETE_WINDOW", self.destroy) | 
					
						
							|  |  |  |     def destroy(self): | 
					
						
							|  |  |  |         """Destroy this and all descendants widgets. This will
 | 
					
						
							|  |  |  |         end the application of this Tcl interpreter."""
 | 
					
						
							|  |  |  |         for c in self.children.values(): c.destroy() | 
					
						
							|  |  |  |         self.tk.call('destroy', self._w) | 
					
						
							|  |  |  |         Misc.destroy(self) | 
					
						
							|  |  |  |         global _default_root | 
					
						
							|  |  |  |         if _support_default_root and _default_root is self: | 
					
						
							|  |  |  |             _default_root = None | 
					
						
							|  |  |  |     def readprofile(self, baseName, className): | 
					
						
							|  |  |  |         """Internal function. It reads BASENAME.tcl and CLASSNAME.tcl into
 | 
					
						
							|  |  |  |         the Tcl Interpreter and calls execfile on BASENAME.py and CLASSNAME.py if | 
					
						
							|  |  |  |         such a file exists in the home directory."""
 | 
					
						
							|  |  |  |         import os | 
					
						
							|  |  |  |         if os.environ.has_key('HOME'): home = os.environ['HOME'] | 
					
						
							|  |  |  |         else: home = os.curdir | 
					
						
							|  |  |  |         class_tcl = os.path.join(home, '.%s.tcl' % className) | 
					
						
							|  |  |  |         class_py = os.path.join(home, '.%s.py' % className) | 
					
						
							|  |  |  |         base_tcl = os.path.join(home, '.%s.tcl' % baseName) | 
					
						
							|  |  |  |         base_py = os.path.join(home, '.%s.py' % baseName) | 
					
						
							|  |  |  |         dir = {'self': self} | 
					
						
							|  |  |  |         exec 'from Tkinter import *' in dir | 
					
						
							|  |  |  |         if os.path.isfile(class_tcl): | 
					
						
							|  |  |  |             self.tk.call('source', class_tcl) | 
					
						
							|  |  |  |         if os.path.isfile(class_py): | 
					
						
							|  |  |  |             execfile(class_py, dir) | 
					
						
							|  |  |  |         if os.path.isfile(base_tcl): | 
					
						
							|  |  |  |             self.tk.call('source', base_tcl) | 
					
						
							|  |  |  |         if os.path.isfile(base_py): | 
					
						
							|  |  |  |             execfile(base_py, dir) | 
					
						
							|  |  |  |     def report_callback_exception(self, exc, val, tb): | 
					
						
							|  |  |  |         """Internal function. It reports exception on sys.stderr.""" | 
					
						
							|  |  |  |         import traceback, sys | 
					
						
							|  |  |  |         sys.stderr.write("Exception in Tkinter callback\n") | 
					
						
							|  |  |  |         sys.last_type = exc | 
					
						
							|  |  |  |         sys.last_value = val | 
					
						
							|  |  |  |         sys.last_traceback = tb | 
					
						
							|  |  |  |         traceback.print_exception(exc, val, tb) | 
					
						
							| 
									
										
										
										
											2004-02-18 05:59:53 +00:00
										 |  |  |     def __getattr__(self, attr): | 
					
						
							|  |  |  |         "Delegate attribute access to the interpreter object" | 
					
						
							|  |  |  |         return getattr(self.tk, attr) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-11-07 20:38:49 +00:00
										 |  |  | # Ideally, the classes Pack, Place and Grid disappear, the | 
					
						
							|  |  |  | # pack/place/grid methods are defined on the Widget class, and | 
					
						
							|  |  |  | # everybody uses w.pack_whatever(...) instead of Pack.whatever(w, | 
					
						
							|  |  |  | # ...), with pack(), place() and grid() being short for | 
					
						
							|  |  |  | # pack_configure(), place_configure() and grid_columnconfigure(), and | 
					
						
							|  |  |  | # forget() being short for pack_forget().  As a practical matter, I'm | 
					
						
							|  |  |  | # afraid that there is too much code out there that may be using the | 
					
						
							|  |  |  | # Pack, Place or Grid class, so I leave them intact -- but only as | 
					
						
							|  |  |  | # backwards compatibility features.  Also note that those methods that | 
					
						
							|  |  |  | # take a master as argument (e.g. pack_propagate) have been moved to | 
					
						
							|  |  |  | # the Misc class (which now incorporates all methods common between | 
					
						
							|  |  |  | # toplevel and interior widgets).  Again, for compatibility, these are | 
					
						
							|  |  |  | # copied into the Pack, Place or Grid class. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-02-18 05:59:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def Tcl(screenName=None, baseName=None, className='Tk', useTk=0): | 
					
						
							|  |  |  |     return Tk(screenName, baseName, className, useTk) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | class Pack: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Geometry manager Pack.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Base class to use the methods pack_* in every widget."""
 | 
					
						
							|  |  |  |     def pack_configure(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Pack a widget in the parent widget. Use as options:
 | 
					
						
							|  |  |  |         after=widget - pack it after you have packed widget | 
					
						
							|  |  |  |         anchor=NSEW (or subset) - position widget according to | 
					
						
							|  |  |  |                                   given direction | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  |                 before=widget - pack it before you will pack widget | 
					
						
							| 
									
										
										
										
											2003-04-16 19:42:51 +00:00
										 |  |  |         expand=bool - expand widget if parent size grows | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         fill=NONE or X or Y or BOTH - fill widget if widget grows | 
					
						
							|  |  |  |         in=master - use master to contain this widget | 
					
						
							|  |  |  |         ipadx=amount - add internal padding in x direction | 
					
						
							|  |  |  |         ipady=amount - add internal padding in y direction | 
					
						
							|  |  |  |         padx=amount - add padding in x direction | 
					
						
							|  |  |  |         pady=amount - add padding in y direction | 
					
						
							|  |  |  |         side=TOP or BOTTOM or LEFT or RIGHT -  where to add this widget. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.tk.call( | 
					
						
							|  |  |  |               ('pack', 'configure', self._w) | 
					
						
							|  |  |  |               + self._options(cnf, kw)) | 
					
						
							|  |  |  |     pack = configure = config = pack_configure | 
					
						
							|  |  |  |     def pack_forget(self): | 
					
						
							|  |  |  |         """Unmap this widget and do not use it for the packing order.""" | 
					
						
							|  |  |  |         self.tk.call('pack', 'forget', self._w) | 
					
						
							|  |  |  |     forget = pack_forget | 
					
						
							|  |  |  |     def pack_info(self): | 
					
						
							|  |  |  |         """Return information about the packing options
 | 
					
						
							|  |  |  |         for this widget."""
 | 
					
						
							|  |  |  |         words = self.tk.splitlist( | 
					
						
							|  |  |  |             self.tk.call('pack', 'info', self._w)) | 
					
						
							|  |  |  |         dict = {} | 
					
						
							|  |  |  |         for i in range(0, len(words), 2): | 
					
						
							|  |  |  |             key = words[i][1:] | 
					
						
							|  |  |  |             value = words[i+1] | 
					
						
							|  |  |  |             if value[:1] == '.': | 
					
						
							|  |  |  |                 value = self._nametowidget(value) | 
					
						
							|  |  |  |             dict[key] = value | 
					
						
							|  |  |  |         return dict | 
					
						
							|  |  |  |     info = pack_info | 
					
						
							|  |  |  |     propagate = pack_propagate = Misc.pack_propagate | 
					
						
							|  |  |  |     slaves = pack_slaves = Misc.pack_slaves | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Place: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Geometry manager Place.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Base class to use the methods place_* in every widget."""
 | 
					
						
							|  |  |  |     def place_configure(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Place a widget in the parent widget. Use as options:
 | 
					
						
							|  |  |  |         in=master - master relative to which the widget is placed. | 
					
						
							|  |  |  |         x=amount - locate anchor of this widget at position x of master | 
					
						
							|  |  |  |         y=amount - locate anchor of this widget at position y of master | 
					
						
							|  |  |  |         relx=amount - locate anchor of this widget between 0.0 and 1.0 | 
					
						
							|  |  |  |                       relative to width of master (1.0 is right edge) | 
					
						
							|  |  |  |             rely=amount - locate anchor of this widget between 0.0 and 1.0 | 
					
						
							|  |  |  |                       relative to height of master (1.0 is bottom edge) | 
					
						
							|  |  |  |             anchor=NSEW (or subset) - position anchor according to given direction | 
					
						
							|  |  |  |         width=amount - width of this widget in pixel | 
					
						
							|  |  |  |         height=amount - height of this widget in pixel | 
					
						
							|  |  |  |         relwidth=amount - width of this widget between 0.0 and 1.0 | 
					
						
							|  |  |  |                           relative to width of master (1.0 is the same width | 
					
						
							|  |  |  |                   as the master) | 
					
						
							|  |  |  |             relheight=amount - height of this widget between 0.0 and 1.0 | 
					
						
							|  |  |  |                            relative to height of master (1.0 is the same | 
					
						
							|  |  |  |                    height as the master) | 
					
						
							|  |  |  |             bordermode="inside" or "outside" - whether to take border width of master widget | 
					
						
							|  |  |  |                                                into account | 
					
						
							|  |  |  |             """
 | 
					
						
							|  |  |  |         for k in ['in_']: | 
					
						
							|  |  |  |             if kw.has_key(k): | 
					
						
							|  |  |  |                 kw[k[:-1]] = kw[k] | 
					
						
							|  |  |  |                 del kw[k] | 
					
						
							|  |  |  |         self.tk.call( | 
					
						
							|  |  |  |               ('place', 'configure', self._w) | 
					
						
							|  |  |  |               + self._options(cnf, kw)) | 
					
						
							|  |  |  |     place = configure = config = place_configure | 
					
						
							|  |  |  |     def place_forget(self): | 
					
						
							|  |  |  |         """Unmap this widget.""" | 
					
						
							|  |  |  |         self.tk.call('place', 'forget', self._w) | 
					
						
							|  |  |  |     forget = place_forget | 
					
						
							|  |  |  |     def place_info(self): | 
					
						
							|  |  |  |         """Return information about the placing options
 | 
					
						
							|  |  |  |         for this widget."""
 | 
					
						
							|  |  |  |         words = self.tk.splitlist( | 
					
						
							|  |  |  |             self.tk.call('place', 'info', self._w)) | 
					
						
							|  |  |  |         dict = {} | 
					
						
							|  |  |  |         for i in range(0, len(words), 2): | 
					
						
							|  |  |  |             key = words[i][1:] | 
					
						
							|  |  |  |             value = words[i+1] | 
					
						
							|  |  |  |             if value[:1] == '.': | 
					
						
							|  |  |  |                 value = self._nametowidget(value) | 
					
						
							|  |  |  |             dict[key] = value | 
					
						
							|  |  |  |         return dict | 
					
						
							|  |  |  |     info = place_info | 
					
						
							|  |  |  |     slaves = place_slaves = Misc.place_slaves | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-05-16 16:00:19 +00:00
										 |  |  | class Grid: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Geometry manager Grid.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Base class to use the methods grid_* in every widget."""
 | 
					
						
							|  |  |  |     # Thanks to Masazumi Yoshikawa (yosikawa@isi.edu) | 
					
						
							|  |  |  |     def grid_configure(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Position a widget in the parent widget in a grid. Use as options:
 | 
					
						
							|  |  |  |         column=number - use cell identified with given column (starting with 0) | 
					
						
							|  |  |  |         columnspan=number - this widget will span several columns | 
					
						
							|  |  |  |         in=master - use master to contain this widget | 
					
						
							|  |  |  |         ipadx=amount - add internal padding in x direction | 
					
						
							|  |  |  |         ipady=amount - add internal padding in y direction | 
					
						
							|  |  |  |         padx=amount - add padding in x direction | 
					
						
							|  |  |  |         pady=amount - add padding in y direction | 
					
						
							|  |  |  |         row=number - use cell identified with given row (starting with 0) | 
					
						
							|  |  |  |         rowspan=number - this widget will span several rows | 
					
						
							|  |  |  |         sticky=NSEW - if cell is larger on which sides will this | 
					
						
							|  |  |  |                       widget stick to the cell boundary | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.tk.call( | 
					
						
							|  |  |  |               ('grid', 'configure', self._w) | 
					
						
							|  |  |  |               + self._options(cnf, kw)) | 
					
						
							|  |  |  |     grid = configure = config = grid_configure | 
					
						
							|  |  |  |     bbox = grid_bbox = Misc.grid_bbox | 
					
						
							|  |  |  |     columnconfigure = grid_columnconfigure = Misc.grid_columnconfigure | 
					
						
							|  |  |  |     def grid_forget(self): | 
					
						
							|  |  |  |         """Unmap this widget.""" | 
					
						
							|  |  |  |         self.tk.call('grid', 'forget', self._w) | 
					
						
							|  |  |  |     forget = grid_forget | 
					
						
							|  |  |  |     def grid_remove(self): | 
					
						
							|  |  |  |         """Unmap this widget but remember the grid options.""" | 
					
						
							|  |  |  |         self.tk.call('grid', 'remove', self._w) | 
					
						
							|  |  |  |     def grid_info(self): | 
					
						
							|  |  |  |         """Return information about the options
 | 
					
						
							|  |  |  |         for positioning this widget in a grid."""
 | 
					
						
							|  |  |  |         words = self.tk.splitlist( | 
					
						
							|  |  |  |             self.tk.call('grid', 'info', self._w)) | 
					
						
							|  |  |  |         dict = {} | 
					
						
							|  |  |  |         for i in range(0, len(words), 2): | 
					
						
							|  |  |  |             key = words[i][1:] | 
					
						
							|  |  |  |             value = words[i+1] | 
					
						
							|  |  |  |             if value[:1] == '.': | 
					
						
							|  |  |  |                 value = self._nametowidget(value) | 
					
						
							|  |  |  |             dict[key] = value | 
					
						
							|  |  |  |         return dict | 
					
						
							|  |  |  |     info = grid_info | 
					
						
							| 
									
										
										
										
											2001-10-13 09:33:51 +00:00
										 |  |  |     location = grid_location = Misc.grid_location | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     propagate = grid_propagate = Misc.grid_propagate | 
					
						
							|  |  |  |     rowconfigure = grid_rowconfigure = Misc.grid_rowconfigure | 
					
						
							|  |  |  |     size = grid_size = Misc.grid_size | 
					
						
							|  |  |  |     slaves = grid_slaves = Misc.grid_slaves | 
					
						
							| 
									
										
										
										
											1996-05-16 16:00:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-11-07 20:38:49 +00:00
										 |  |  | class BaseWidget(Misc): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal class.""" | 
					
						
							|  |  |  |     def _setup(self, master, cnf): | 
					
						
							|  |  |  |         """Internal function. Sets up information about children.""" | 
					
						
							|  |  |  |         if _support_default_root: | 
					
						
							|  |  |  |             global _default_root | 
					
						
							|  |  |  |             if not master: | 
					
						
							|  |  |  |                 if not _default_root: | 
					
						
							|  |  |  |                     _default_root = Tk() | 
					
						
							|  |  |  |                 master = _default_root | 
					
						
							|  |  |  |         self.master = master | 
					
						
							|  |  |  |         self.tk = master.tk | 
					
						
							|  |  |  |         name = None | 
					
						
							|  |  |  |         if cnf.has_key('name'): | 
					
						
							|  |  |  |             name = cnf['name'] | 
					
						
							|  |  |  |             del cnf['name'] | 
					
						
							|  |  |  |         if not name: | 
					
						
							| 
									
										
										
										
											2004-02-12 17:35:32 +00:00
										 |  |  |             name = repr(id(self)) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         self._name = name | 
					
						
							|  |  |  |         if master._w=='.': | 
					
						
							|  |  |  |             self._w = '.' + name | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self._w = master._w + '.' + name | 
					
						
							|  |  |  |         self.children = {} | 
					
						
							|  |  |  |         if self.master.children.has_key(self._name): | 
					
						
							|  |  |  |             self.master.children[self._name].destroy() | 
					
						
							|  |  |  |         self.master.children[self._name] = self | 
					
						
							|  |  |  |     def __init__(self, master, widgetName, cnf={}, kw={}, extra=()): | 
					
						
							|  |  |  |         """Construct a widget with the parent widget MASTER, a name WIDGETNAME
 | 
					
						
							|  |  |  |         and appropriate options."""
 | 
					
						
							|  |  |  |         if kw: | 
					
						
							|  |  |  |             cnf = _cnfmerge((cnf, kw)) | 
					
						
							|  |  |  |         self.widgetName = widgetName | 
					
						
							|  |  |  |         BaseWidget._setup(self, master, cnf) | 
					
						
							|  |  |  |         classes = [] | 
					
						
							|  |  |  |         for k in cnf.keys(): | 
					
						
							|  |  |  |             if type(k) is ClassType: | 
					
						
							|  |  |  |                 classes.append((k, cnf[k])) | 
					
						
							|  |  |  |                 del cnf[k] | 
					
						
							|  |  |  |         self.tk.call( | 
					
						
							|  |  |  |             (widgetName, self._w) + extra + self._options(cnf)) | 
					
						
							|  |  |  |         for k, v in classes: | 
					
						
							|  |  |  |             k.configure(self, v) | 
					
						
							|  |  |  |     def destroy(self): | 
					
						
							|  |  |  |         """Destroy this and all descendants widgets.""" | 
					
						
							|  |  |  |         for c in self.children.values(): c.destroy() | 
					
						
							| 
									
										
										
										
											2006-06-17 09:25:15 +00:00
										 |  |  |         self.tk.call('destroy', self._w) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         if self.master.children.has_key(self._name): | 
					
						
							|  |  |  |             del self.master.children[self._name] | 
					
						
							|  |  |  |         Misc.destroy(self) | 
					
						
							|  |  |  |     def _do(self, name, args=()): | 
					
						
							|  |  |  |         # XXX Obsolete -- better use self.tk.call directly! | 
					
						
							|  |  |  |         return self.tk.call((self._w, name) + args) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-11-07 20:38:49 +00:00
										 |  |  | class Widget(BaseWidget, Pack, Place, Grid): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal class.
 | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     Base class for a widget which can be positioned with the geometry managers | 
					
						
							|  |  |  |     Pack, Place or Grid."""
 | 
					
						
							|  |  |  |     pass | 
					
						
							| 
									
										
										
										
											1997-11-07 20:38:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Toplevel(BaseWidget, Wm): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Toplevel widget, e.g. for dialogs.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a toplevel widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: background, bd, bg, borderwidth, class, | 
					
						
							|  |  |  |         colormap, container, cursor, height, highlightbackground, | 
					
						
							|  |  |  |         highlightcolor, highlightthickness, menu, relief, screen, takefocus, | 
					
						
							|  |  |  |         use, visual, width."""
 | 
					
						
							|  |  |  |         if kw: | 
					
						
							|  |  |  |             cnf = _cnfmerge((cnf, kw)) | 
					
						
							|  |  |  |         extra = () | 
					
						
							|  |  |  |         for wmkey in ['screen', 'class_', 'class', 'visual', | 
					
						
							|  |  |  |                   'colormap']: | 
					
						
							|  |  |  |             if cnf.has_key(wmkey): | 
					
						
							|  |  |  |                 val = cnf[wmkey] | 
					
						
							|  |  |  |                 # TBD: a hack needed because some keys | 
					
						
							|  |  |  |                 # are not valid as keyword arguments | 
					
						
							|  |  |  |                 if wmkey[-1] == '_': opt = '-'+wmkey[:-1] | 
					
						
							|  |  |  |                 else: opt = '-'+wmkey | 
					
						
							|  |  |  |                 extra = extra + (opt, val) | 
					
						
							|  |  |  |                 del cnf[wmkey] | 
					
						
							|  |  |  |         BaseWidget.__init__(self, master, 'toplevel', cnf, {}, extra) | 
					
						
							|  |  |  |         root = self._root() | 
					
						
							|  |  |  |         self.iconname(root.iconname()) | 
					
						
							|  |  |  |         self.title(root.title()) | 
					
						
							|  |  |  |         self.protocol("WM_DELETE_WINDOW", self.destroy) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Button(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Button widget.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a button widget with the parent MASTER.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         STANDARD OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             activebackground, activeforeground, anchor, | 
					
						
							|  |  |  |             background, bitmap, borderwidth, cursor, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             disabledforeground, font, foreground | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             highlightbackground, highlightcolor, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             highlightthickness, image, justify, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             padx, pady, relief, repeatdelay, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             repeatinterval, takefocus, text, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             textvariable, underline, wraplength | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         WIDGET-SPECIFIC OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             command, compound, default, height, | 
					
						
							|  |  |  |             overrelief, state, width | 
					
						
							|  |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         Widget.__init__(self, master, 'button', cnf, kw) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def tkButtonEnter(self, *dummy): | 
					
						
							|  |  |  |         self.tk.call('tkButtonEnter', self._w) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def tkButtonLeave(self, *dummy): | 
					
						
							|  |  |  |         self.tk.call('tkButtonLeave', self._w) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def tkButtonDown(self, *dummy): | 
					
						
							|  |  |  |         self.tk.call('tkButtonDown', self._w) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def tkButtonUp(self, *dummy): | 
					
						
							|  |  |  |         self.tk.call('tkButtonUp', self._w) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def tkButtonInvoke(self, *dummy): | 
					
						
							|  |  |  |         self.tk.call('tkButtonInvoke', self._w) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def flash(self): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Flash the button.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         This is accomplished by redisplaying | 
					
						
							|  |  |  |         the button several times, alternating between active and | 
					
						
							|  |  |  |         normal colors. At the end of the flash the button is left | 
					
						
							|  |  |  |         in the same normal/active state as when the command was | 
					
						
							|  |  |  |         invoked. This command is ignored if the button's state is | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         disabled. | 
					
						
							|  |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         self.tk.call(self._w, 'flash') | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def invoke(self): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Invoke the command associated with the button.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The return value is the return value from the command, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         or an empty string if there is no command associated with | 
					
						
							|  |  |  |         the button. This command is ignored if the button's state | 
					
						
							|  |  |  |         is disabled. | 
					
						
							|  |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         return self.tk.call(self._w, 'invoke') | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Indices: | 
					
						
							| 
									
										
										
										
											1995-08-04 03:50:29 +00:00
										 |  |  | # XXX I don't like these -- take them away | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | def AtEnd(): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     return 'end' | 
					
						
							| 
									
										
										
										
											1994-06-20 09:09:51 +00:00
										 |  |  | def AtInsert(*args): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     s = 'insert' | 
					
						
							|  |  |  |     for a in args: | 
					
						
							|  |  |  |         if a: s = s + (' ' + a) | 
					
						
							|  |  |  |     return s | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | def AtSelFirst(): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     return 'sel.first' | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | def AtSelLast(): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     return 'sel.last' | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | def At(x, y=None): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     if y is None: | 
					
						
							| 
									
										
										
										
											2004-02-12 17:35:32 +00:00
										 |  |  |         return '@%r' % (x,) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2004-02-12 17:35:32 +00:00
										 |  |  |         return '@%r,%r' % (x, y) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Canvas(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Canvas widget to display graphical elements like lines or text.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a canvas widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: background, bd, bg, borderwidth, closeenough, | 
					
						
							|  |  |  |         confine, cursor, height, highlightbackground, highlightcolor, | 
					
						
							|  |  |  |         highlightthickness, insertbackground, insertborderwidth, | 
					
						
							|  |  |  |         insertofftime, insertontime, insertwidth, offset, relief, | 
					
						
							|  |  |  |         scrollregion, selectbackground, selectborderwidth, selectforeground, | 
					
						
							|  |  |  |         state, takefocus, width, xscrollcommand, xscrollincrement, | 
					
						
							|  |  |  |         yscrollcommand, yscrollincrement."""
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'canvas', cnf, kw) | 
					
						
							|  |  |  |     def addtag(self, *args): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'addtag') + args) | 
					
						
							|  |  |  |     def addtag_above(self, newtag, tagOrId): | 
					
						
							|  |  |  |         """Add tag NEWTAG to all items above TAGORID.""" | 
					
						
							|  |  |  |         self.addtag(newtag, 'above', tagOrId) | 
					
						
							|  |  |  |     def addtag_all(self, newtag): | 
					
						
							|  |  |  |         """Add tag NEWTAG to all items.""" | 
					
						
							|  |  |  |         self.addtag(newtag, 'all') | 
					
						
							|  |  |  |     def addtag_below(self, newtag, tagOrId): | 
					
						
							|  |  |  |         """Add tag NEWTAG to all items below TAGORID.""" | 
					
						
							|  |  |  |         self.addtag(newtag, 'below', tagOrId) | 
					
						
							|  |  |  |     def addtag_closest(self, newtag, x, y, halo=None, start=None): | 
					
						
							|  |  |  |         """Add tag NEWTAG to item which is closest to pixel at X, Y.
 | 
					
						
							|  |  |  |         If several match take the top-most. | 
					
						
							|  |  |  |         All items closer than HALO are considered overlapping (all are | 
					
						
							|  |  |  |         closests). If START is specified the next below this tag is taken."""
 | 
					
						
							|  |  |  |         self.addtag(newtag, 'closest', x, y, halo, start) | 
					
						
							|  |  |  |     def addtag_enclosed(self, newtag, x1, y1, x2, y2): | 
					
						
							|  |  |  |         """Add tag NEWTAG to all items in the rectangle defined
 | 
					
						
							|  |  |  |         by X1,Y1,X2,Y2."""
 | 
					
						
							|  |  |  |         self.addtag(newtag, 'enclosed', x1, y1, x2, y2) | 
					
						
							|  |  |  |     def addtag_overlapping(self, newtag, x1, y1, x2, y2): | 
					
						
							|  |  |  |         """Add tag NEWTAG to all items which overlap the rectangle
 | 
					
						
							|  |  |  |         defined by X1,Y1,X2,Y2."""
 | 
					
						
							|  |  |  |         self.addtag(newtag, 'overlapping', x1, y1, x2, y2) | 
					
						
							|  |  |  |     def addtag_withtag(self, newtag, tagOrId): | 
					
						
							|  |  |  |         """Add tag NEWTAG to all items with TAGORID.""" | 
					
						
							|  |  |  |         self.addtag(newtag, 'withtag', tagOrId) | 
					
						
							|  |  |  |     def bbox(self, *args): | 
					
						
							|  |  |  |         """Return a tuple of X1,Y1,X2,Y2 coordinates for a rectangle
 | 
					
						
							|  |  |  |         which encloses all items with tags specified as arguments."""
 | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call((self._w, 'bbox') + args)) or None | 
					
						
							|  |  |  |     def tag_unbind(self, tagOrId, sequence, funcid=None): | 
					
						
							|  |  |  |         """Unbind for all items with TAGORID for event SEQUENCE  the
 | 
					
						
							|  |  |  |         function identified with FUNCID."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'bind', tagOrId, sequence, '') | 
					
						
							|  |  |  |         if funcid: | 
					
						
							|  |  |  |             self.deletecommand(funcid) | 
					
						
							|  |  |  |     def tag_bind(self, tagOrId, sequence=None, func=None, add=None): | 
					
						
							|  |  |  |         """Bind to all items with TAGORID at event SEQUENCE a call to function FUNC.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         An additional boolean parameter ADD specifies whether FUNC will be | 
					
						
							|  |  |  |         called additionally to the other bound function or whether it will | 
					
						
							|  |  |  |         replace the previous function. See bind for the return value."""
 | 
					
						
							|  |  |  |         return self._bind((self._w, 'bind', tagOrId), | 
					
						
							|  |  |  |                   sequence, func, add) | 
					
						
							|  |  |  |     def canvasx(self, screenx, gridspacing=None): | 
					
						
							|  |  |  |         """Return the canvas x coordinate of pixel position SCREENX rounded
 | 
					
						
							|  |  |  |         to nearest multiple of GRIDSPACING units."""
 | 
					
						
							|  |  |  |         return getdouble(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'canvasx', screenx, gridspacing)) | 
					
						
							|  |  |  |     def canvasy(self, screeny, gridspacing=None): | 
					
						
							|  |  |  |         """Return the canvas y coordinate of pixel position SCREENY rounded
 | 
					
						
							|  |  |  |         to nearest multiple of GRIDSPACING units."""
 | 
					
						
							|  |  |  |         return getdouble(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'canvasy', screeny, gridspacing)) | 
					
						
							|  |  |  |     def coords(self, *args): | 
					
						
							|  |  |  |         """Return a list of coordinates for the item given in ARGS.""" | 
					
						
							|  |  |  |         # XXX Should use _flatten on args | 
					
						
							|  |  |  |         return map(getdouble, | 
					
						
							| 
									
										
										
										
											1998-05-19 21:18:13 +00:00
										 |  |  |                            self.tk.splitlist( | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |                    self.tk.call((self._w, 'coords') + args))) | 
					
						
							|  |  |  |     def _create(self, itemType, args, kw): # Args: (val, val, ..., cnf={}) | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         args = _flatten(args) | 
					
						
							|  |  |  |         cnf = args[-1] | 
					
						
							|  |  |  |         if type(cnf) in (DictionaryType, TupleType): | 
					
						
							|  |  |  |             args = args[:-1] | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             cnf = {} | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         return getint(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'create', itemType, | 
					
						
							|  |  |  |             *(args + self._options(cnf, kw)))) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def create_arc(self, *args, **kw): | 
					
						
							|  |  |  |         """Create arc shaped region with coordinates x1,y1,x2,y2.""" | 
					
						
							|  |  |  |         return self._create('arc', args, kw) | 
					
						
							|  |  |  |     def create_bitmap(self, *args, **kw): | 
					
						
							|  |  |  |         """Create bitmap with coordinates x1,y1.""" | 
					
						
							|  |  |  |         return self._create('bitmap', args, kw) | 
					
						
							|  |  |  |     def create_image(self, *args, **kw): | 
					
						
							|  |  |  |         """Create image item with coordinates x1,y1.""" | 
					
						
							|  |  |  |         return self._create('image', args, kw) | 
					
						
							|  |  |  |     def create_line(self, *args, **kw): | 
					
						
							|  |  |  |         """Create line with coordinates x1,y1,...,xn,yn.""" | 
					
						
							|  |  |  |         return self._create('line', args, kw) | 
					
						
							|  |  |  |     def create_oval(self, *args, **kw): | 
					
						
							|  |  |  |         """Create oval with coordinates x1,y1,x2,y2.""" | 
					
						
							|  |  |  |         return self._create('oval', args, kw) | 
					
						
							|  |  |  |     def create_polygon(self, *args, **kw): | 
					
						
							|  |  |  |         """Create polygon with coordinates x1,y1,...,xn,yn.""" | 
					
						
							|  |  |  |         return self._create('polygon', args, kw) | 
					
						
							|  |  |  |     def create_rectangle(self, *args, **kw): | 
					
						
							|  |  |  |         """Create rectangle with coordinates x1,y1,x2,y2.""" | 
					
						
							|  |  |  |         return self._create('rectangle', args, kw) | 
					
						
							|  |  |  |     def create_text(self, *args, **kw): | 
					
						
							|  |  |  |         """Create text with coordinates x1,y1.""" | 
					
						
							|  |  |  |         return self._create('text', args, kw) | 
					
						
							|  |  |  |     def create_window(self, *args, **kw): | 
					
						
							|  |  |  |         """Create window with coordinates x1,y1,x2,y2.""" | 
					
						
							|  |  |  |         return self._create('window', args, kw) | 
					
						
							|  |  |  |     def dchars(self, *args): | 
					
						
							|  |  |  |         """Delete characters of text items identified by tag or id in ARGS (possibly
 | 
					
						
							|  |  |  |         several times) from FIRST to LAST character (including)."""
 | 
					
						
							|  |  |  |         self.tk.call((self._w, 'dchars') + args) | 
					
						
							|  |  |  |     def delete(self, *args): | 
					
						
							|  |  |  |         """Delete items identified by all tag or ids contained in ARGS.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'delete') + args) | 
					
						
							|  |  |  |     def dtag(self, *args): | 
					
						
							|  |  |  |         """Delete tag or id given as last arguments in ARGS from items
 | 
					
						
							|  |  |  |         identified by first argument in ARGS."""
 | 
					
						
							|  |  |  |         self.tk.call((self._w, 'dtag') + args) | 
					
						
							|  |  |  |     def find(self, *args): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call((self._w, 'find') + args)) or () | 
					
						
							|  |  |  |     def find_above(self, tagOrId): | 
					
						
							|  |  |  |         """Return items above TAGORID.""" | 
					
						
							|  |  |  |         return self.find('above', tagOrId) | 
					
						
							|  |  |  |     def find_all(self): | 
					
						
							|  |  |  |         """Return all items.""" | 
					
						
							|  |  |  |         return self.find('all') | 
					
						
							|  |  |  |     def find_below(self, tagOrId): | 
					
						
							|  |  |  |         """Return all items below TAGORID.""" | 
					
						
							|  |  |  |         return self.find('below', tagOrId) | 
					
						
							|  |  |  |     def find_closest(self, x, y, halo=None, start=None): | 
					
						
							|  |  |  |         """Return item which is closest to pixel at X, Y.
 | 
					
						
							|  |  |  |         If several match take the top-most. | 
					
						
							|  |  |  |         All items closer than HALO are considered overlapping (all are | 
					
						
							|  |  |  |         closests). If START is specified the next below this tag is taken."""
 | 
					
						
							|  |  |  |         return self.find('closest', x, y, halo, start) | 
					
						
							|  |  |  |     def find_enclosed(self, x1, y1, x2, y2): | 
					
						
							|  |  |  |         """Return all items in rectangle defined
 | 
					
						
							|  |  |  |         by X1,Y1,X2,Y2."""
 | 
					
						
							|  |  |  |         return self.find('enclosed', x1, y1, x2, y2) | 
					
						
							|  |  |  |     def find_overlapping(self, x1, y1, x2, y2): | 
					
						
							|  |  |  |         """Return all items which overlap the rectangle
 | 
					
						
							|  |  |  |         defined by X1,Y1,X2,Y2."""
 | 
					
						
							|  |  |  |         return self.find('overlapping', x1, y1, x2, y2) | 
					
						
							|  |  |  |     def find_withtag(self, tagOrId): | 
					
						
							|  |  |  |         """Return all items with TAGORID.""" | 
					
						
							|  |  |  |         return self.find('withtag', tagOrId) | 
					
						
							|  |  |  |     def focus(self, *args): | 
					
						
							|  |  |  |         """Set focus to the first item specified in ARGS.""" | 
					
						
							|  |  |  |         return self.tk.call((self._w, 'focus') + args) | 
					
						
							|  |  |  |     def gettags(self, *args): | 
					
						
							|  |  |  |         """Return tags associated with the first item specified in ARGS.""" | 
					
						
							|  |  |  |         return self.tk.splitlist( | 
					
						
							|  |  |  |             self.tk.call((self._w, 'gettags') + args)) | 
					
						
							|  |  |  |     def icursor(self, *args): | 
					
						
							|  |  |  |         """Set cursor at position POS in the item identified by TAGORID.
 | 
					
						
							|  |  |  |         In ARGS TAGORID must be first."""
 | 
					
						
							|  |  |  |         self.tk.call((self._w, 'icursor') + args) | 
					
						
							|  |  |  |     def index(self, *args): | 
					
						
							|  |  |  |         """Return position of cursor as integer in item specified in ARGS.""" | 
					
						
							|  |  |  |         return getint(self.tk.call((self._w, 'index') + args)) | 
					
						
							|  |  |  |     def insert(self, *args): | 
					
						
							|  |  |  |         """Insert TEXT in item TAGORID at position POS. ARGS must
 | 
					
						
							|  |  |  |         be TAGORID POS TEXT."""
 | 
					
						
							|  |  |  |         self.tk.call((self._w, 'insert') + args) | 
					
						
							|  |  |  |     def itemcget(self, tagOrId, option): | 
					
						
							|  |  |  |         """Return the resource value for an OPTION for item TAGORID.""" | 
					
						
							|  |  |  |         return self.tk.call( | 
					
						
							|  |  |  |             (self._w, 'itemcget') + (tagOrId, '-'+option)) | 
					
						
							|  |  |  |     def itemconfigure(self, tagOrId, cnf=None, **kw): | 
					
						
							|  |  |  |         """Configure resources of an item TAGORID.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The values for resources are specified as keyword | 
					
						
							|  |  |  |         arguments. To get an overview about | 
					
						
							|  |  |  |         the allowed keyword arguments call the method without arguments. | 
					
						
							|  |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |         return self._configure(('itemconfigure', tagOrId), cnf, kw) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     itemconfig = itemconfigure | 
					
						
							|  |  |  |     # lower, tkraise/lift hide Misc.lower, Misc.tkraise/lift, | 
					
						
							|  |  |  |     # so the preferred name for them is tag_lower, tag_raise | 
					
						
							|  |  |  |     # (similar to tag_bind, and similar to the Text widget); | 
					
						
							|  |  |  |     # unfortunately can't delete the old ones yet (maybe in 1.6) | 
					
						
							|  |  |  |     def tag_lower(self, *args): | 
					
						
							|  |  |  |         """Lower an item TAGORID given in ARGS
 | 
					
						
							|  |  |  |         (optional below another item)."""
 | 
					
						
							|  |  |  |         self.tk.call((self._w, 'lower') + args) | 
					
						
							|  |  |  |     lower = tag_lower | 
					
						
							|  |  |  |     def move(self, *args): | 
					
						
							|  |  |  |         """Move an item TAGORID given in ARGS.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'move') + args) | 
					
						
							|  |  |  |     def postscript(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Print the contents of the canvas to a postscript
 | 
					
						
							|  |  |  |         file. Valid options: colormap, colormode, file, fontmap, | 
					
						
							|  |  |  |         height, pageanchor, pageheight, pagewidth, pagex, pagey, | 
					
						
							|  |  |  |         rotate, witdh, x, y."""
 | 
					
						
							|  |  |  |         return self.tk.call((self._w, 'postscript') + | 
					
						
							|  |  |  |                     self._options(cnf, kw)) | 
					
						
							|  |  |  |     def tag_raise(self, *args): | 
					
						
							|  |  |  |         """Raise an item TAGORID given in ARGS
 | 
					
						
							|  |  |  |         (optional above another item)."""
 | 
					
						
							|  |  |  |         self.tk.call((self._w, 'raise') + args) | 
					
						
							|  |  |  |     lift = tkraise = tag_raise | 
					
						
							|  |  |  |     def scale(self, *args): | 
					
						
							|  |  |  |         """Scale item TAGORID with XORIGIN, YORIGIN, XSCALE, YSCALE.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'scale') + args) | 
					
						
							|  |  |  |     def scan_mark(self, x, y): | 
					
						
							|  |  |  |         """Remember the current X, Y coordinates.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'scan', 'mark', x, y) | 
					
						
							| 
									
										
										
										
											2003-01-10 23:24:32 +00:00
										 |  |  |     def scan_dragto(self, x, y, gain=10): | 
					
						
							|  |  |  |         """Adjust the view of the canvas to GAIN times the
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         difference between X and Y and the coordinates given in | 
					
						
							|  |  |  |         scan_mark."""
 | 
					
						
							| 
									
										
										
										
											2003-01-10 23:24:32 +00:00
										 |  |  |         self.tk.call(self._w, 'scan', 'dragto', x, y, gain) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def select_adjust(self, tagOrId, index): | 
					
						
							|  |  |  |         """Adjust the end of the selection near the cursor of an item TAGORID to index.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'select', 'adjust', tagOrId, index) | 
					
						
							|  |  |  |     def select_clear(self): | 
					
						
							|  |  |  |         """Clear the selection if it is in this widget.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'select', 'clear') | 
					
						
							|  |  |  |     def select_from(self, tagOrId, index): | 
					
						
							|  |  |  |         """Set the fixed end of a selection in item TAGORID to INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'select', 'from', tagOrId, index) | 
					
						
							|  |  |  |     def select_item(self): | 
					
						
							|  |  |  |         """Return the item which has the selection.""" | 
					
						
							| 
									
										
										
										
											2002-07-23 02:52:58 +00:00
										 |  |  |         return self.tk.call(self._w, 'select', 'item') or None | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def select_to(self, tagOrId, index): | 
					
						
							|  |  |  |         """Set the variable end of a selection in item TAGORID to INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'select', 'to', tagOrId, index) | 
					
						
							|  |  |  |     def type(self, tagOrId): | 
					
						
							|  |  |  |         """Return the type of the item TAGORID.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'type', tagOrId) or None | 
					
						
							|  |  |  |     def xview(self, *args): | 
					
						
							|  |  |  |         """Query and change horizontal position of the view.""" | 
					
						
							|  |  |  |         if not args: | 
					
						
							|  |  |  |             return self._getdoubles(self.tk.call(self._w, 'xview')) | 
					
						
							|  |  |  |         self.tk.call((self._w, 'xview') + args) | 
					
						
							|  |  |  |     def xview_moveto(self, fraction): | 
					
						
							|  |  |  |         """Adjusts the view in the window so that FRACTION of the
 | 
					
						
							|  |  |  |         total width of the canvas is off-screen to the left."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', 'moveto', fraction) | 
					
						
							|  |  |  |     def xview_scroll(self, number, what): | 
					
						
							|  |  |  |         """Shift the x-view according to NUMBER which is measured in "units" or "pages" (WHAT).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', 'scroll', number, what) | 
					
						
							|  |  |  |     def yview(self, *args): | 
					
						
							|  |  |  |         """Query and change vertical position of the view.""" | 
					
						
							|  |  |  |         if not args: | 
					
						
							|  |  |  |             return self._getdoubles(self.tk.call(self._w, 'yview')) | 
					
						
							|  |  |  |         self.tk.call((self._w, 'yview') + args) | 
					
						
							|  |  |  |     def yview_moveto(self, fraction): | 
					
						
							|  |  |  |         """Adjusts the view in the window so that FRACTION of the
 | 
					
						
							|  |  |  |         total height of the canvas is off-screen to the top."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'yview', 'moveto', fraction) | 
					
						
							|  |  |  |     def yview_scroll(self, number, what): | 
					
						
							|  |  |  |         """Shift the y-view according to NUMBER which is measured in "units" or "pages" (WHAT).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'yview', 'scroll', number, what) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Checkbutton(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Checkbutton widget which is either in on- or off-state.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a checkbutton widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: activebackground, activeforeground, anchor, | 
					
						
							|  |  |  |         background, bd, bg, bitmap, borderwidth, command, cursor, | 
					
						
							|  |  |  |         disabledforeground, fg, font, foreground, height, | 
					
						
							|  |  |  |         highlightbackground, highlightcolor, highlightthickness, image, | 
					
						
							|  |  |  |         indicatoron, justify, offvalue, onvalue, padx, pady, relief, | 
					
						
							|  |  |  |         selectcolor, selectimage, state, takefocus, text, textvariable, | 
					
						
							|  |  |  |         underline, variable, width, wraplength."""
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'checkbutton', cnf, kw) | 
					
						
							|  |  |  |     def deselect(self): | 
					
						
							|  |  |  |         """Put the button in off-state.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'deselect') | 
					
						
							|  |  |  |     def flash(self): | 
					
						
							|  |  |  |         """Flash the button.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'flash') | 
					
						
							|  |  |  |     def invoke(self): | 
					
						
							|  |  |  |         """Toggle the button and invoke a command if given as resource.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'invoke') | 
					
						
							|  |  |  |     def select(self): | 
					
						
							|  |  |  |         """Put the button in on-state.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'select') | 
					
						
							|  |  |  |     def toggle(self): | 
					
						
							|  |  |  |         """Toggle the button.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'toggle') | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Entry(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Entry widget which allows to display simple text.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct an entry widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: background, bd, bg, borderwidth, cursor, | 
					
						
							|  |  |  |         exportselection, fg, font, foreground, highlightbackground, | 
					
						
							|  |  |  |         highlightcolor, highlightthickness, insertbackground, | 
					
						
							|  |  |  |         insertborderwidth, insertofftime, insertontime, insertwidth, | 
					
						
							|  |  |  |         invalidcommand, invcmd, justify, relief, selectbackground, | 
					
						
							|  |  |  |         selectborderwidth, selectforeground, show, state, takefocus, | 
					
						
							|  |  |  |         textvariable, validate, validatecommand, vcmd, width, | 
					
						
							|  |  |  |         xscrollcommand."""
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'entry', cnf, kw) | 
					
						
							|  |  |  |     def delete(self, first, last=None): | 
					
						
							|  |  |  |         """Delete text from FIRST to LAST (not included).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'delete', first, last) | 
					
						
							|  |  |  |     def get(self): | 
					
						
							|  |  |  |         """Return the text.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'get') | 
					
						
							|  |  |  |     def icursor(self, index): | 
					
						
							|  |  |  |         """Insert cursor at INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'icursor', index) | 
					
						
							|  |  |  |     def index(self, index): | 
					
						
							|  |  |  |         """Return position of cursor.""" | 
					
						
							|  |  |  |         return getint(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'index', index)) | 
					
						
							|  |  |  |     def insert(self, index, string): | 
					
						
							|  |  |  |         """Insert STRING at INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'insert', index, string) | 
					
						
							|  |  |  |     def scan_mark(self, x): | 
					
						
							|  |  |  |         """Remember the current X, Y coordinates.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'scan', 'mark', x) | 
					
						
							|  |  |  |     def scan_dragto(self, x): | 
					
						
							|  |  |  |         """Adjust the view of the canvas to 10 times the
 | 
					
						
							|  |  |  |         difference between X and Y and the coordinates given in | 
					
						
							|  |  |  |         scan_mark."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'scan', 'dragto', x) | 
					
						
							|  |  |  |     def selection_adjust(self, index): | 
					
						
							|  |  |  |         """Adjust the end of the selection near the cursor to INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'selection', 'adjust', index) | 
					
						
							|  |  |  |     select_adjust = selection_adjust | 
					
						
							|  |  |  |     def selection_clear(self): | 
					
						
							|  |  |  |         """Clear the selection if it is in this widget.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'selection', 'clear') | 
					
						
							|  |  |  |     select_clear = selection_clear | 
					
						
							|  |  |  |     def selection_from(self, index): | 
					
						
							|  |  |  |         """Set the fixed end of a selection to INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'selection', 'from', index) | 
					
						
							|  |  |  |     select_from = selection_from | 
					
						
							|  |  |  |     def selection_present(self): | 
					
						
							|  |  |  |         """Return whether the widget has the selection.""" | 
					
						
							|  |  |  |         return self.tk.getboolean( | 
					
						
							|  |  |  |             self.tk.call(self._w, 'selection', 'present')) | 
					
						
							|  |  |  |     select_present = selection_present | 
					
						
							|  |  |  |     def selection_range(self, start, end): | 
					
						
							|  |  |  |         """Set the selection from START to END (not included).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'selection', 'range', start, end) | 
					
						
							|  |  |  |     select_range = selection_range | 
					
						
							|  |  |  |     def selection_to(self, index): | 
					
						
							|  |  |  |         """Set the variable end of a selection to INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'selection', 'to', index) | 
					
						
							|  |  |  |     select_to = selection_to | 
					
						
							|  |  |  |     def xview(self, index): | 
					
						
							|  |  |  |         """Query and change horizontal position of the view.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', index) | 
					
						
							|  |  |  |     def xview_moveto(self, fraction): | 
					
						
							|  |  |  |         """Adjust the view in the window so that FRACTION of the
 | 
					
						
							|  |  |  |         total width of the entry is off-screen to the left."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', 'moveto', fraction) | 
					
						
							|  |  |  |     def xview_scroll(self, number, what): | 
					
						
							|  |  |  |         """Shift the x-view according to NUMBER which is measured in "units" or "pages" (WHAT).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', 'scroll', number, what) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Frame(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Frame widget which may contain other widgets and can have a 3D border.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a frame widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: background, bd, bg, borderwidth, class, | 
					
						
							|  |  |  |         colormap, container, cursor, height, highlightbackground, | 
					
						
							|  |  |  |         highlightcolor, highlightthickness, relief, takefocus, visual, width."""
 | 
					
						
							|  |  |  |         cnf = _cnfmerge((cnf, kw)) | 
					
						
							|  |  |  |         extra = () | 
					
						
							|  |  |  |         if cnf.has_key('class_'): | 
					
						
							|  |  |  |             extra = ('-class', cnf['class_']) | 
					
						
							|  |  |  |             del cnf['class_'] | 
					
						
							|  |  |  |         elif cnf.has_key('class'): | 
					
						
							|  |  |  |             extra = ('-class', cnf['class']) | 
					
						
							|  |  |  |             del cnf['class'] | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'frame', cnf, {}, extra) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Label(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Label widget which can display text and bitmaps.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a label widget with the parent MASTER.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         STANDARD OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             activebackground, activeforeground, anchor, | 
					
						
							|  |  |  |             background, bitmap, borderwidth, cursor, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             disabledforeground, font, foreground, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             highlightbackground, highlightcolor, | 
					
						
							|  |  |  |             highlightthickness, image, justify, | 
					
						
							|  |  |  |             padx, pady, relief, takefocus, text, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             textvariable, underline, wraplength | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         WIDGET-SPECIFIC OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             height, state, width | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         Widget.__init__(self, master, 'label', cnf, kw) | 
					
						
							| 
									
										
										
										
											1995-07-14 15:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | class Listbox(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Listbox widget which can display a list of strings.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a listbox widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: background, bd, bg, borderwidth, cursor, | 
					
						
							|  |  |  |         exportselection, fg, font, foreground, height, highlightbackground, | 
					
						
							|  |  |  |         highlightcolor, highlightthickness, relief, selectbackground, | 
					
						
							|  |  |  |         selectborderwidth, selectforeground, selectmode, setgrid, takefocus, | 
					
						
							|  |  |  |         width, xscrollcommand, yscrollcommand, listvariable."""
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'listbox', cnf, kw) | 
					
						
							|  |  |  |     def activate(self, index): | 
					
						
							|  |  |  |         """Activate item identified by INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'activate', index) | 
					
						
							|  |  |  |     def bbox(self, *args): | 
					
						
							|  |  |  |         """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 | 
					
						
							|  |  |  |     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')) | 
					
						
							|  |  |  |     def delete(self, first, last=None): | 
					
						
							|  |  |  |         """Delete items from FIRST to LAST (not included).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'delete', first, last) | 
					
						
							|  |  |  |     def get(self, first, last=None): | 
					
						
							|  |  |  |         """Get list of items from FIRST to LAST (not included).""" | 
					
						
							|  |  |  |         if last: | 
					
						
							|  |  |  |             return self.tk.splitlist(self.tk.call( | 
					
						
							|  |  |  |                 self._w, 'get', first, last)) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return self.tk.call(self._w, 'get', first) | 
					
						
							|  |  |  |     def index(self, index): | 
					
						
							|  |  |  |         """Return index of item identified with INDEX.""" | 
					
						
							|  |  |  |         i = self.tk.call(self._w, 'index', index) | 
					
						
							|  |  |  |         if i == 'none': return None | 
					
						
							|  |  |  |         return getint(i) | 
					
						
							|  |  |  |     def insert(self, index, *elements): | 
					
						
							|  |  |  |         """Insert ELEMENTS at INDEX.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'insert', index) + elements) | 
					
						
							|  |  |  |     def nearest(self, y): | 
					
						
							|  |  |  |         """Get index of item which is nearest to y coordinate Y.""" | 
					
						
							|  |  |  |         return getint(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'nearest', y)) | 
					
						
							|  |  |  |     def scan_mark(self, x, y): | 
					
						
							|  |  |  |         """Remember the current X, Y coordinates.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'scan', 'mark', x, y) | 
					
						
							|  |  |  |     def scan_dragto(self, x, y): | 
					
						
							|  |  |  |         """Adjust the view of the listbox to 10 times the
 | 
					
						
							|  |  |  |         difference between X and Y and the coordinates given in | 
					
						
							|  |  |  |         scan_mark."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'scan', 'dragto', x, y) | 
					
						
							|  |  |  |     def see(self, index): | 
					
						
							|  |  |  |         """Scroll such that INDEX is visible.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'see', index) | 
					
						
							|  |  |  |     def selection_anchor(self, index): | 
					
						
							|  |  |  |         """Set the fixed end oft the selection to INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'selection', 'anchor', index) | 
					
						
							|  |  |  |     select_anchor = selection_anchor | 
					
						
							|  |  |  |     def selection_clear(self, first, last=None): | 
					
						
							|  |  |  |         """Clear the selection from FIRST to LAST (not included).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, | 
					
						
							|  |  |  |                  'selection', 'clear', first, last) | 
					
						
							|  |  |  |     select_clear = selection_clear | 
					
						
							|  |  |  |     def selection_includes(self, index): | 
					
						
							|  |  |  |         """Return 1 if INDEX is part of the selection.""" | 
					
						
							|  |  |  |         return self.tk.getboolean(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'selection', 'includes', index)) | 
					
						
							|  |  |  |     select_includes = selection_includes | 
					
						
							|  |  |  |     def selection_set(self, first, last=None): | 
					
						
							|  |  |  |         """Set the selection from FIRST to LAST (not included) without
 | 
					
						
							|  |  |  |         changing the currently selected elements."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'selection', 'set', first, last) | 
					
						
							|  |  |  |     select_set = selection_set | 
					
						
							|  |  |  |     def size(self): | 
					
						
							|  |  |  |         """Return the number of elements in the listbox.""" | 
					
						
							|  |  |  |         return getint(self.tk.call(self._w, 'size')) | 
					
						
							|  |  |  |     def xview(self, *what): | 
					
						
							|  |  |  |         """Query and change horizontal position of the view.""" | 
					
						
							|  |  |  |         if not what: | 
					
						
							|  |  |  |             return self._getdoubles(self.tk.call(self._w, 'xview')) | 
					
						
							|  |  |  |         self.tk.call((self._w, 'xview') + what) | 
					
						
							|  |  |  |     def xview_moveto(self, fraction): | 
					
						
							|  |  |  |         """Adjust the view in the window so that FRACTION of the
 | 
					
						
							|  |  |  |         total width of the entry is off-screen to the left."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', 'moveto', fraction) | 
					
						
							|  |  |  |     def xview_scroll(self, number, what): | 
					
						
							|  |  |  |         """Shift the x-view according to NUMBER which is measured in "units" or "pages" (WHAT).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', 'scroll', number, what) | 
					
						
							|  |  |  |     def yview(self, *what): | 
					
						
							|  |  |  |         """Query and change vertical position of the view.""" | 
					
						
							|  |  |  |         if not what: | 
					
						
							|  |  |  |             return self._getdoubles(self.tk.call(self._w, 'yview')) | 
					
						
							|  |  |  |         self.tk.call((self._w, 'yview') + what) | 
					
						
							|  |  |  |     def yview_moveto(self, fraction): | 
					
						
							|  |  |  |         """Adjust the view in the window so that FRACTION of the
 | 
					
						
							|  |  |  |         total width of the entry is off-screen to the top."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'yview', 'moveto', fraction) | 
					
						
							|  |  |  |     def yview_scroll(self, number, what): | 
					
						
							|  |  |  |         """Shift the y-view according to NUMBER which is measured in "units" or "pages" (WHAT).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'yview', 'scroll', number, what) | 
					
						
							| 
									
										
										
										
											2001-09-05 19:29:56 +00:00
										 |  |  |     def itemcget(self, index, option): | 
					
						
							|  |  |  |         """Return the resource value for an ITEM and an OPTION.""" | 
					
						
							|  |  |  |         return self.tk.call( | 
					
						
							|  |  |  |             (self._w, 'itemcget') + (index, '-'+option)) | 
					
						
							| 
									
										
										
										
											2001-09-01 18:29:55 +00:00
										 |  |  |     def itemconfigure(self, index, cnf=None, **kw): | 
					
						
							| 
									
										
										
										
											2001-09-05 19:29:56 +00:00
										 |  |  |         """Configure resources of an ITEM.
 | 
					
						
							| 
									
										
										
										
											2001-09-01 18:29:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         The values for resources are specified as keyword arguments. | 
					
						
							|  |  |  |         To get an overview about the allowed keyword arguments | 
					
						
							|  |  |  |         call the method without arguments. | 
					
						
							|  |  |  |         Valid resource names: background, bg, foreground, fg, | 
					
						
							|  |  |  |         selectbackground, selectforeground."""
 | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |         return self._configure(('itemconfigure', index), cnf, kw) | 
					
						
							| 
									
										
										
										
											2001-09-01 18:29:55 +00:00
										 |  |  |     itemconfig = itemconfigure | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Menu(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Menu widget which allows to display menu bars, pull-down menus and pop-up menus.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct menu widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: activebackground, activeborderwidth, | 
					
						
							|  |  |  |         activeforeground, background, bd, bg, borderwidth, cursor, | 
					
						
							|  |  |  |         disabledforeground, fg, font, foreground, postcommand, relief, | 
					
						
							|  |  |  |         selectcolor, takefocus, tearoff, tearoffcommand, title, type."""
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'menu', cnf, kw) | 
					
						
							|  |  |  |     def tk_bindForTraversal(self): | 
					
						
							|  |  |  |         pass # obsolete since Tk 4.0 | 
					
						
							|  |  |  |     def tk_mbPost(self): | 
					
						
							|  |  |  |         self.tk.call('tk_mbPost', self._w) | 
					
						
							|  |  |  |     def tk_mbUnpost(self): | 
					
						
							|  |  |  |         self.tk.call('tk_mbUnpost') | 
					
						
							|  |  |  |     def tk_traverseToMenu(self, char): | 
					
						
							|  |  |  |         self.tk.call('tk_traverseToMenu', self._w, char) | 
					
						
							|  |  |  |     def tk_traverseWithinMenu(self, char): | 
					
						
							|  |  |  |         self.tk.call('tk_traverseWithinMenu', self._w, char) | 
					
						
							|  |  |  |     def tk_getMenuButtons(self): | 
					
						
							|  |  |  |         return self.tk.call('tk_getMenuButtons', self._w) | 
					
						
							|  |  |  |     def tk_nextMenu(self, count): | 
					
						
							|  |  |  |         self.tk.call('tk_nextMenu', count) | 
					
						
							|  |  |  |     def tk_nextMenuEntry(self, count): | 
					
						
							|  |  |  |         self.tk.call('tk_nextMenuEntry', count) | 
					
						
							|  |  |  |     def tk_invokeMenu(self): | 
					
						
							|  |  |  |         self.tk.call('tk_invokeMenu', self._w) | 
					
						
							|  |  |  |     def tk_firstMenu(self): | 
					
						
							|  |  |  |         self.tk.call('tk_firstMenu', self._w) | 
					
						
							|  |  |  |     def tk_mbButtonDown(self): | 
					
						
							|  |  |  |         self.tk.call('tk_mbButtonDown', self._w) | 
					
						
							|  |  |  |     def tk_popup(self, x, y, entry=""): | 
					
						
							|  |  |  |         """Post the menu at position X,Y with entry ENTRY.""" | 
					
						
							|  |  |  |         self.tk.call('tk_popup', self._w, x, y, entry) | 
					
						
							|  |  |  |     def activate(self, index): | 
					
						
							|  |  |  |         """Activate entry at INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'activate', index) | 
					
						
							|  |  |  |     def add(self, itemType, cnf={}, **kw): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'add', itemType) + | 
					
						
							|  |  |  |                  self._options(cnf, kw)) | 
					
						
							|  |  |  |     def add_cascade(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Add hierarchical menu item.""" | 
					
						
							|  |  |  |         self.add('cascade', cnf or kw) | 
					
						
							|  |  |  |     def add_checkbutton(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Add checkbutton menu item.""" | 
					
						
							|  |  |  |         self.add('checkbutton', cnf or kw) | 
					
						
							|  |  |  |     def add_command(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Add command menu item.""" | 
					
						
							|  |  |  |         self.add('command', cnf or kw) | 
					
						
							|  |  |  |     def add_radiobutton(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Addd radio menu item.""" | 
					
						
							|  |  |  |         self.add('radiobutton', cnf or kw) | 
					
						
							|  |  |  |     def add_separator(self, cnf={}, **kw): | 
					
						
							|  |  |  |         """Add separator.""" | 
					
						
							|  |  |  |         self.add('separator', cnf or kw) | 
					
						
							|  |  |  |     def insert(self, index, itemType, cnf={}, **kw): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'insert', index, itemType) + | 
					
						
							|  |  |  |                  self._options(cnf, kw)) | 
					
						
							|  |  |  |     def insert_cascade(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Add hierarchical menu item at INDEX.""" | 
					
						
							|  |  |  |         self.insert(index, 'cascade', cnf or kw) | 
					
						
							|  |  |  |     def insert_checkbutton(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Add checkbutton menu item at INDEX.""" | 
					
						
							|  |  |  |         self.insert(index, 'checkbutton', cnf or kw) | 
					
						
							|  |  |  |     def insert_command(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Add command menu item at INDEX.""" | 
					
						
							|  |  |  |         self.insert(index, 'command', cnf or kw) | 
					
						
							|  |  |  |     def insert_radiobutton(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Addd radio menu item at INDEX.""" | 
					
						
							|  |  |  |         self.insert(index, 'radiobutton', cnf or kw) | 
					
						
							|  |  |  |     def insert_separator(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Add separator at INDEX.""" | 
					
						
							|  |  |  |         self.insert(index, 'separator', cnf or kw) | 
					
						
							|  |  |  |     def delete(self, index1, index2=None): | 
					
						
							|  |  |  |         """Delete menu items between INDEX1 and INDEX2 (not included).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'delete', index1, index2) | 
					
						
							|  |  |  |     def entrycget(self, index, option): | 
					
						
							|  |  |  |         """Return the resource value of an menu item for OPTION at INDEX.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'entrycget', index, '-' + option) | 
					
						
							|  |  |  |     def entryconfigure(self, index, cnf=None, **kw): | 
					
						
							|  |  |  |         """Configure a menu item at INDEX.""" | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |         return self._configure(('entryconfigure', index), cnf, kw) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     entryconfig = entryconfigure | 
					
						
							|  |  |  |     def index(self, index): | 
					
						
							|  |  |  |         """Return the index of a menu item identified by INDEX.""" | 
					
						
							|  |  |  |         i = self.tk.call(self._w, 'index', index) | 
					
						
							|  |  |  |         if i == 'none': return None | 
					
						
							|  |  |  |         return getint(i) | 
					
						
							|  |  |  |     def invoke(self, index): | 
					
						
							|  |  |  |         """Invoke a menu item identified by INDEX and execute
 | 
					
						
							|  |  |  |         the associated command."""
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'invoke', index) | 
					
						
							|  |  |  |     def post(self, x, y): | 
					
						
							|  |  |  |         """Display a menu at position X,Y.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'post', x, y) | 
					
						
							|  |  |  |     def type(self, index): | 
					
						
							|  |  |  |         """Return the type of the menu item at INDEX.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'type', index) | 
					
						
							|  |  |  |     def unpost(self): | 
					
						
							|  |  |  |         """Unmap a menu.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'unpost') | 
					
						
							|  |  |  |     def yposition(self, index): | 
					
						
							|  |  |  |         """Return the y-position of the topmost pixel of the menu item at INDEX.""" | 
					
						
							|  |  |  |         return getint(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'yposition', index)) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Menubutton(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Menubutton widget, obsolete since Tk8.0.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'menubutton', cnf, kw) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Message(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Message widget to display multiline text. Obsolete since Label does it too.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'message', cnf, kw) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Radiobutton(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Radiobutton widget which shows only one of several buttons in on-state.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a radiobutton widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: activebackground, activeforeground, anchor, | 
					
						
							|  |  |  |         background, bd, bg, bitmap, borderwidth, command, cursor, | 
					
						
							|  |  |  |         disabledforeground, fg, font, foreground, height, | 
					
						
							|  |  |  |         highlightbackground, highlightcolor, highlightthickness, image, | 
					
						
							|  |  |  |         indicatoron, justify, padx, pady, relief, selectcolor, selectimage, | 
					
						
							|  |  |  |         state, takefocus, text, textvariable, underline, value, variable, | 
					
						
							|  |  |  |         width, wraplength."""
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'radiobutton', cnf, kw) | 
					
						
							|  |  |  |     def deselect(self): | 
					
						
							|  |  |  |         """Put the button in off-state.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'deselect') | 
					
						
							|  |  |  |     def flash(self): | 
					
						
							|  |  |  |         """Flash the button.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'flash') | 
					
						
							|  |  |  |     def invoke(self): | 
					
						
							|  |  |  |         """Toggle the button and invoke a command if given as resource.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'invoke') | 
					
						
							|  |  |  |     def select(self): | 
					
						
							|  |  |  |         """Put the button in on-state.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'select') | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Scale(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Scale widget which can display a numerical scale.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a scale widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: activebackground, background, bigincrement, bd, | 
					
						
							|  |  |  |         bg, borderwidth, command, cursor, digits, fg, font, foreground, from, | 
					
						
							|  |  |  |         highlightbackground, highlightcolor, highlightthickness, label, | 
					
						
							|  |  |  |         length, orient, relief, repeatdelay, repeatinterval, resolution, | 
					
						
							|  |  |  |         showvalue, sliderlength, sliderrelief, state, takefocus, | 
					
						
							|  |  |  |         tickinterval, to, troughcolor, variable, width."""
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'scale', cnf, kw) | 
					
						
							|  |  |  |     def get(self): | 
					
						
							|  |  |  |         """Get the current value as integer or float.""" | 
					
						
							|  |  |  |         value = self.tk.call(self._w, 'get') | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             return getint(value) | 
					
						
							|  |  |  |         except ValueError: | 
					
						
							|  |  |  |             return getdouble(value) | 
					
						
							|  |  |  |     def set(self, value): | 
					
						
							|  |  |  |         """Set the value to VALUE.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'set', value) | 
					
						
							|  |  |  |     def coords(self, value=None): | 
					
						
							|  |  |  |         """Return a tuple (X,Y) of the point along the centerline of the
 | 
					
						
							|  |  |  |         trough that corresponds to VALUE or the current value if None is | 
					
						
							|  |  |  |         given."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return self._getints(self.tk.call(self._w, 'coords', value)) | 
					
						
							|  |  |  |     def identify(self, x, y): | 
					
						
							|  |  |  |         """Return where the point X,Y lies. Valid return values are "slider",
 | 
					
						
							|  |  |  |         "though1" and "though2"."""
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'identify', x, y) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Scrollbar(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Scrollbar widget which displays a slider at a certain position.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a scrollbar widget with the parent MASTER.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: activebackground, activerelief, | 
					
						
							|  |  |  |         background, bd, bg, borderwidth, command, cursor, | 
					
						
							|  |  |  |         elementborderwidth, highlightbackground, | 
					
						
							|  |  |  |         highlightcolor, highlightthickness, jump, orient, | 
					
						
							|  |  |  |         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 delta(self, deltax, deltay): | 
					
						
							|  |  |  |         """Return the fractional change of the scrollbar setting if it
 | 
					
						
							|  |  |  |         would be moved by DELTAX or DELTAY pixels."""
 | 
					
						
							|  |  |  |         return getdouble( | 
					
						
							|  |  |  |             self.tk.call(self._w, 'delta', deltax, deltay)) | 
					
						
							|  |  |  |     def fraction(self, x, y): | 
					
						
							|  |  |  |         """Return the fractional value which corresponds to a slider
 | 
					
						
							|  |  |  |         position of X,Y."""
 | 
					
						
							|  |  |  |         return getdouble(self.tk.call(self._w, 'fraction', x, y)) | 
					
						
							|  |  |  |     def identify(self, x, y): | 
					
						
							|  |  |  |         """Return the element under position X,Y as one of
 | 
					
						
							|  |  |  |         "arrow1","slider","arrow2" or ""."""
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'identify', x, y) | 
					
						
							|  |  |  |     def get(self): | 
					
						
							|  |  |  |         """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): | 
					
						
							|  |  |  |         """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) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | class Text(Widget): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Text widget which can display text in various forms.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a text widget with the parent MASTER.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         STANDARD OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             background, borderwidth, cursor, | 
					
						
							|  |  |  |             exportselection, font, foreground, | 
					
						
							|  |  |  |             highlightbackground, highlightcolor, | 
					
						
							|  |  |  |             highlightthickness, insertbackground, | 
					
						
							|  |  |  |             insertborderwidth, insertofftime, | 
					
						
							|  |  |  |             insertontime, insertwidth, padx, pady, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             relief, selectbackground, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             selectborderwidth, selectforeground, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             setgrid, takefocus, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             xscrollcommand, yscrollcommand, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         WIDGET-SPECIFIC OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             autoseparators, height, maxundo, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             spacing1, spacing2, spacing3, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             state, tabs, undo, width, wrap, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         Widget.__init__(self, master, 'text', cnf, kw) | 
					
						
							|  |  |  |     def bbox(self, *args): | 
					
						
							|  |  |  |         """Return a tuple of (x,y,width,height) which gives the bounding
 | 
					
						
							|  |  |  |         box of the visible part of the character at the index in ARGS."""
 | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call((self._w, 'bbox') + args)) or None | 
					
						
							|  |  |  |     def tk_textSelectTo(self, index): | 
					
						
							|  |  |  |         self.tk.call('tk_textSelectTo', self._w, index) | 
					
						
							|  |  |  |     def tk_textBackspace(self): | 
					
						
							|  |  |  |         self.tk.call('tk_textBackspace', self._w) | 
					
						
							|  |  |  |     def tk_textIndexCloser(self, a, b, c): | 
					
						
							|  |  |  |         self.tk.call('tk_textIndexCloser', self._w, a, b, c) | 
					
						
							|  |  |  |     def tk_textResetAnchor(self, index): | 
					
						
							|  |  |  |         self.tk.call('tk_textResetAnchor', self._w, index) | 
					
						
							|  |  |  |     def compare(self, index1, op, index2): | 
					
						
							|  |  |  |         """Return whether between index INDEX1 and index INDEX2 the
 | 
					
						
							|  |  |  |         relation OP is satisfied. OP is one of <, <=, ==, >=, >, or !=."""
 | 
					
						
							|  |  |  |         return self.tk.getboolean(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'compare', index1, op, index2)) | 
					
						
							|  |  |  |     def debug(self, boolean=None): | 
					
						
							|  |  |  |         """Turn on the internal consistency checks of the B-Tree inside the text
 | 
					
						
							|  |  |  |         widget according to BOOLEAN."""
 | 
					
						
							|  |  |  |         return self.tk.getboolean(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'debug', boolean)) | 
					
						
							|  |  |  |     def delete(self, index1, index2=None): | 
					
						
							|  |  |  |         """Delete the characters between INDEX1 and INDEX2 (not included).""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'delete', index1, index2) | 
					
						
							|  |  |  |     def dlineinfo(self, index): | 
					
						
							|  |  |  |         """Return tuple (x,y,width,height,baseline) giving the bounding box
 | 
					
						
							|  |  |  |         and baseline position of the visible part of the line containing | 
					
						
							|  |  |  |         the character at INDEX."""
 | 
					
						
							|  |  |  |         return self._getints(self.tk.call(self._w, 'dlineinfo', index)) | 
					
						
							| 
									
										
										
										
											2002-04-23 13:29:43 +00:00
										 |  |  |     def dump(self, index1, index2=None, command=None, **kw): | 
					
						
							|  |  |  |         """Return the contents of the widget between index1 and index2.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-23 13:29:43 +00:00
										 |  |  |         The type of contents returned in filtered based on the keyword | 
					
						
							|  |  |  |         parameters; if 'all', 'image', 'mark', 'tag', 'text', or 'window' are | 
					
						
							|  |  |  |         given and true, then the corresponding items are returned. The result | 
					
						
							|  |  |  |         is a list of triples of the form (key, value, index). If none of the | 
					
						
							|  |  |  |         keywords are true then 'all' is used by default. | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-23 13:29:43 +00:00
										 |  |  |         If the 'command' argument is given, it is called once for each element | 
					
						
							|  |  |  |         of the list of triples, with the values of each triple serving as the | 
					
						
							|  |  |  |         arguments to the function. In this case the list is not returned."""
 | 
					
						
							|  |  |  |         args = [] | 
					
						
							|  |  |  |         func_name = None | 
					
						
							|  |  |  |         result = None | 
					
						
							|  |  |  |         if not command: | 
					
						
							|  |  |  |             # Never call the dump command without the -command flag, since the | 
					
						
							|  |  |  |             # output could involve Tcl quoting and would be a pain to parse | 
					
						
							|  |  |  |             # right. Instead just set the command to build a list of triples | 
					
						
							|  |  |  |             # as if we had done the parsing. | 
					
						
							|  |  |  |             result = [] | 
					
						
							|  |  |  |             def append_triple(key, value, index, result=result): | 
					
						
							|  |  |  |                 result.append((key, value, index)) | 
					
						
							|  |  |  |             command = append_triple | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             if not isinstance(command, str): | 
					
						
							|  |  |  |                 func_name = command = self._register(command) | 
					
						
							|  |  |  |             args += ["-command", command] | 
					
						
							|  |  |  |             for key in kw: | 
					
						
							|  |  |  |                 if kw[key]: args.append("-" + key) | 
					
						
							|  |  |  |             args.append(index1) | 
					
						
							|  |  |  |             if index2: | 
					
						
							|  |  |  |                 args.append(index2) | 
					
						
							|  |  |  |             self.tk.call(self._w, "dump", *args) | 
					
						
							|  |  |  |             return result | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             if func_name: | 
					
						
							|  |  |  |                 self.deletecommand(func_name) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     ## new in tk8.4 | 
					
						
							|  |  |  |     def edit(self, *args): | 
					
						
							|  |  |  |         """Internal method
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         This method controls the undo mechanism and | 
					
						
							|  |  |  |         the modified flag. The exact behavior of the | 
					
						
							|  |  |  |         command depends on the option argument that | 
					
						
							|  |  |  |         follows the edit argument. The following forms | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         of the command are currently supported: | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         edit_modified, edit_redo, edit_reset, edit_separator | 
					
						
							|  |  |  |         and edit_undo | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call((self._w, 'edit') + args)) or () | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def edit_modified(self, arg=None): | 
					
						
							|  |  |  |         """Get or Set the modified flag
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         If arg is not specified, returns the modified | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         flag of the widget. The insert, delete, edit undo and | 
					
						
							|  |  |  |         edit redo commands or the user can set or clear the | 
					
						
							|  |  |  |         modified flag. If boolean is specified, sets the | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         modified flag of the widget to arg. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.edit("modified", arg) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def edit_redo(self): | 
					
						
							|  |  |  |         """Redo the last undone edit
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         When the undo option is true, reapplies the last | 
					
						
							|  |  |  |         undone edits provided no other edits were done since | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         then. Generates an error when the redo stack is empty. | 
					
						
							|  |  |  |         Does nothing when the undo option is false. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.edit("redo") | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def edit_reset(self): | 
					
						
							|  |  |  |         """Clears the undo and redo stacks
 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.edit("reset") | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def edit_separator(self): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Inserts a separator (boundary) on the undo stack.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         Does nothing when the undo option is false | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.edit("separator") | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def edit_undo(self): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Undoes the last edit action
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If the undo option is true. An edit action is defined | 
					
						
							|  |  |  |         as all the insert and delete commands that are recorded | 
					
						
							|  |  |  |         on the undo stack in between two separators. Generates | 
					
						
							|  |  |  |         an error when the undo stack is empty. Does nothing | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         when the undo option is false | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.edit("undo") | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def get(self, index1, index2=None): | 
					
						
							|  |  |  |         """Return the text from INDEX1 to INDEX2 (not included).""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'get', index1, index2) | 
					
						
							|  |  |  |     # (Image commands are new in 8.0) | 
					
						
							|  |  |  |     def image_cget(self, index, option): | 
					
						
							|  |  |  |         """Return the value of OPTION of an embedded image at INDEX.""" | 
					
						
							|  |  |  |         if option[:1] != "-": | 
					
						
							|  |  |  |             option = "-" + option | 
					
						
							|  |  |  |         if option[-1:] == "_": | 
					
						
							|  |  |  |             option = option[:-1] | 
					
						
							|  |  |  |         return self.tk.call(self._w, "image", "cget", index, option) | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |     def image_configure(self, index, cnf=None, **kw): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Configure an embedded image at INDEX.""" | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |         return self._configure(('image', 'configure', index), cnf, kw) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def image_create(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Create an embedded image at INDEX.""" | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         return self.tk.call( | 
					
						
							|  |  |  |                  self._w, "image", "create", index, | 
					
						
							|  |  |  |                  *self._options(cnf, kw)) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def image_names(self): | 
					
						
							|  |  |  |         """Return all names of embedded images in this widget.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, "image", "names") | 
					
						
							|  |  |  |     def index(self, index): | 
					
						
							|  |  |  |         """Return the index in the form line.char for INDEX.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'index', index) | 
					
						
							|  |  |  |     def insert(self, index, chars, *args): | 
					
						
							|  |  |  |         """Insert CHARS before the characters at INDEX. An additional
 | 
					
						
							|  |  |  |         tag can be given in ARGS. Additional CHARS and tags can follow in ARGS."""
 | 
					
						
							|  |  |  |         self.tk.call((self._w, 'insert', index, chars) + args) | 
					
						
							|  |  |  |     def mark_gravity(self, markName, direction=None): | 
					
						
							|  |  |  |         """Change the gravity of a mark MARKNAME to DIRECTION (LEFT or RIGHT).
 | 
					
						
							|  |  |  |         Return the current value if None is given for DIRECTION."""
 | 
					
						
							|  |  |  |         return self.tk.call( | 
					
						
							|  |  |  |             (self._w, 'mark', 'gravity', markName, direction)) | 
					
						
							|  |  |  |     def mark_names(self): | 
					
						
							|  |  |  |         """Return all mark names.""" | 
					
						
							|  |  |  |         return self.tk.splitlist(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'mark', 'names')) | 
					
						
							|  |  |  |     def mark_set(self, markName, index): | 
					
						
							|  |  |  |         """Set mark MARKNAME before the character at INDEX.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'mark', 'set', markName, index) | 
					
						
							|  |  |  |     def mark_unset(self, *markNames): | 
					
						
							|  |  |  |         """Delete all marks in MARKNAMES.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'mark', 'unset') + markNames) | 
					
						
							|  |  |  |     def mark_next(self, index): | 
					
						
							|  |  |  |         """Return the name of the next mark after INDEX.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'mark', 'next', index) or None | 
					
						
							|  |  |  |     def mark_previous(self, index): | 
					
						
							|  |  |  |         """Return the name of the previous mark before INDEX.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'mark', 'previous', index) or None | 
					
						
							|  |  |  |     def scan_mark(self, x, y): | 
					
						
							|  |  |  |         """Remember the current X, Y coordinates.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'scan', 'mark', x, y) | 
					
						
							|  |  |  |     def scan_dragto(self, x, y): | 
					
						
							|  |  |  |         """Adjust the view of the text to 10 times the
 | 
					
						
							|  |  |  |         difference between X and Y and the coordinates given in | 
					
						
							|  |  |  |         scan_mark."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'scan', 'dragto', x, y) | 
					
						
							|  |  |  |     def search(self, pattern, index, stopindex=None, | 
					
						
							|  |  |  |            forwards=None, backwards=None, exact=None, | 
					
						
							|  |  |  |            regexp=None, nocase=None, count=None): | 
					
						
							|  |  |  |         """Search PATTERN beginning from INDEX until STOPINDEX.
 | 
					
						
							|  |  |  |         Return the index of the first character of a match or an empty string."""
 | 
					
						
							|  |  |  |         args = [self._w, 'search'] | 
					
						
							|  |  |  |         if forwards: args.append('-forwards') | 
					
						
							|  |  |  |         if backwards: args.append('-backwards') | 
					
						
							|  |  |  |         if exact: args.append('-exact') | 
					
						
							|  |  |  |         if regexp: args.append('-regexp') | 
					
						
							|  |  |  |         if nocase: args.append('-nocase') | 
					
						
							|  |  |  |         if count: args.append('-count'); args.append(count) | 
					
						
							|  |  |  |         if pattern[0] == '-': args.append('--') | 
					
						
							|  |  |  |         args.append(pattern) | 
					
						
							|  |  |  |         args.append(index) | 
					
						
							|  |  |  |         if stopindex: args.append(stopindex) | 
					
						
							|  |  |  |         return self.tk.call(tuple(args)) | 
					
						
							|  |  |  |     def see(self, index): | 
					
						
							|  |  |  |         """Scroll such that the character at INDEX is visible.""" | 
					
						
							|  |  |  |         self.tk.call(self._w, 'see', index) | 
					
						
							|  |  |  |     def tag_add(self, tagName, index1, *args): | 
					
						
							|  |  |  |         """Add tag TAGNAME to all characters between INDEX1 and index2 in ARGS.
 | 
					
						
							|  |  |  |         Additional pairs of indices may follow in ARGS."""
 | 
					
						
							|  |  |  |         self.tk.call( | 
					
						
							|  |  |  |             (self._w, 'tag', 'add', tagName, index1) + args) | 
					
						
							|  |  |  |     def tag_unbind(self, tagName, sequence, funcid=None): | 
					
						
							|  |  |  |         """Unbind for all characters with TAGNAME for event SEQUENCE  the
 | 
					
						
							|  |  |  |         function identified with FUNCID."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'tag', 'bind', tagName, sequence, '') | 
					
						
							|  |  |  |         if funcid: | 
					
						
							|  |  |  |             self.deletecommand(funcid) | 
					
						
							|  |  |  |     def tag_bind(self, tagName, sequence, func, add=None): | 
					
						
							|  |  |  |         """Bind to all characters with TAGNAME at event SEQUENCE a call to function FUNC.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         An additional boolean parameter ADD specifies whether FUNC will be | 
					
						
							|  |  |  |         called additionally to the other bound function or whether it will | 
					
						
							|  |  |  |         replace the previous function. See bind for the return value."""
 | 
					
						
							|  |  |  |         return self._bind((self._w, 'tag', 'bind', tagName), | 
					
						
							|  |  |  |                   sequence, func, add) | 
					
						
							|  |  |  |     def tag_cget(self, tagName, option): | 
					
						
							|  |  |  |         """Return the value of OPTION for tag TAGNAME.""" | 
					
						
							|  |  |  |         if option[:1] != '-': | 
					
						
							|  |  |  |             option = '-' + option | 
					
						
							|  |  |  |         if option[-1:] == '_': | 
					
						
							|  |  |  |             option = option[:-1] | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'tag', 'cget', tagName, option) | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |     def tag_configure(self, tagName, cnf=None, **kw): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Configure a tag TAGNAME.""" | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |         return self._configure(('tag', 'configure', tagName), cnf, kw) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     tag_config = tag_configure | 
					
						
							|  |  |  |     def tag_delete(self, *tagNames): | 
					
						
							|  |  |  |         """Delete all tags in TAGNAMES.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'tag', 'delete') + tagNames) | 
					
						
							|  |  |  |     def tag_lower(self, tagName, belowThis=None): | 
					
						
							|  |  |  |         """Change the priority of tag TAGNAME such that it is lower
 | 
					
						
							|  |  |  |         than the priority of BELOWTHIS."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'tag', 'lower', tagName, belowThis) | 
					
						
							|  |  |  |     def tag_names(self, index=None): | 
					
						
							|  |  |  |         """Return a list of all tag names.""" | 
					
						
							|  |  |  |         return self.tk.splitlist( | 
					
						
							|  |  |  |             self.tk.call(self._w, 'tag', 'names', index)) | 
					
						
							|  |  |  |     def tag_nextrange(self, tagName, index1, index2=None): | 
					
						
							|  |  |  |         """Return a list of start and end index for the first sequence of
 | 
					
						
							|  |  |  |         characters between INDEX1 and INDEX2 which all have tag TAGNAME. | 
					
						
							|  |  |  |         The text is searched forward from INDEX1."""
 | 
					
						
							|  |  |  |         return self.tk.splitlist(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'tag', 'nextrange', tagName, index1, index2)) | 
					
						
							|  |  |  |     def tag_prevrange(self, tagName, index1, index2=None): | 
					
						
							|  |  |  |         """Return a list of start and end index for the first sequence of
 | 
					
						
							|  |  |  |         characters between INDEX1 and INDEX2 which all have tag TAGNAME. | 
					
						
							|  |  |  |         The text is searched backwards from INDEX1."""
 | 
					
						
							|  |  |  |         return self.tk.splitlist(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'tag', 'prevrange', tagName, index1, index2)) | 
					
						
							|  |  |  |     def tag_raise(self, tagName, aboveThis=None): | 
					
						
							|  |  |  |         """Change the priority of tag TAGNAME such that it is higher
 | 
					
						
							|  |  |  |         than the priority of ABOVETHIS."""
 | 
					
						
							|  |  |  |         self.tk.call( | 
					
						
							|  |  |  |             self._w, 'tag', 'raise', tagName, aboveThis) | 
					
						
							|  |  |  |     def tag_ranges(self, tagName): | 
					
						
							|  |  |  |         """Return a list of ranges of text which have tag TAGNAME.""" | 
					
						
							|  |  |  |         return self.tk.splitlist(self.tk.call( | 
					
						
							|  |  |  |             self._w, 'tag', 'ranges', tagName)) | 
					
						
							|  |  |  |     def tag_remove(self, tagName, index1, index2=None): | 
					
						
							|  |  |  |         """Remove tag TAGNAME from all characters between INDEX1 and INDEX2.""" | 
					
						
							|  |  |  |         self.tk.call( | 
					
						
							|  |  |  |             self._w, 'tag', 'remove', tagName, index1, index2) | 
					
						
							|  |  |  |     def window_cget(self, index, option): | 
					
						
							|  |  |  |         """Return the value of OPTION of an embedded window at INDEX.""" | 
					
						
							|  |  |  |         if option[:1] != '-': | 
					
						
							|  |  |  |             option = '-' + option | 
					
						
							|  |  |  |         if option[-1:] == '_': | 
					
						
							|  |  |  |             option = option[:-1] | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'window', 'cget', index, option) | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |     def window_configure(self, index, cnf=None, **kw): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Configure an embedded window at INDEX.""" | 
					
						
							| 
									
										
										
										
											2002-10-10 14:36:13 +00:00
										 |  |  |         return self._configure(('window', 'configure', index), cnf, kw) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     window_config = window_configure | 
					
						
							|  |  |  |     def window_create(self, index, cnf={}, **kw): | 
					
						
							|  |  |  |         """Create a window at INDEX.""" | 
					
						
							|  |  |  |         self.tk.call( | 
					
						
							|  |  |  |               (self._w, 'window', 'create', index) | 
					
						
							|  |  |  |               + self._options(cnf, kw)) | 
					
						
							|  |  |  |     def window_names(self): | 
					
						
							|  |  |  |         """Return all names of embedded windows in this widget.""" | 
					
						
							|  |  |  |         return self.tk.splitlist( | 
					
						
							|  |  |  |             self.tk.call(self._w, 'window', 'names')) | 
					
						
							|  |  |  |     def xview(self, *what): | 
					
						
							|  |  |  |         """Query and change horizontal position of the view.""" | 
					
						
							|  |  |  |         if not what: | 
					
						
							|  |  |  |             return self._getdoubles(self.tk.call(self._w, 'xview')) | 
					
						
							|  |  |  |         self.tk.call((self._w, 'xview') + what) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:29:51 +00:00
										 |  |  |     def xview_moveto(self, fraction): | 
					
						
							|  |  |  |         """Adjusts the view in the window so that FRACTION of the
 | 
					
						
							|  |  |  |         total width of the canvas is off-screen to the left."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', 'moveto', fraction) | 
					
						
							|  |  |  |     def xview_scroll(self, number, what): | 
					
						
							|  |  |  |         """Shift the x-view according to NUMBER which is measured
 | 
					
						
							|  |  |  |         in "units" or "pages" (WHAT)."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'xview', 'scroll', number, what) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:51:01 +00:00
										 |  |  |     def yview(self, *what): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         """Query and change vertical position of the view.""" | 
					
						
							| 
									
										
										
										
											2000-08-09 18:51:01 +00:00
										 |  |  |         if not what: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |             return self._getdoubles(self.tk.call(self._w, 'yview')) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:51:01 +00:00
										 |  |  |         self.tk.call((self._w, 'yview') + what) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:29:51 +00:00
										 |  |  |     def yview_moveto(self, fraction): | 
					
						
							|  |  |  |         """Adjusts the view in the window so that FRACTION of the
 | 
					
						
							|  |  |  |         total height of the canvas is off-screen to the top."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'yview', 'moveto', fraction) | 
					
						
							|  |  |  |     def yview_scroll(self, number, what): | 
					
						
							|  |  |  |         """Shift the y-view according to NUMBER which is measured
 | 
					
						
							|  |  |  |         in "units" or "pages" (WHAT)."""
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'yview', 'scroll', number, what) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def yview_pickplace(self, *what): | 
					
						
							|  |  |  |         """Obsolete function, use see.""" | 
					
						
							|  |  |  |         self.tk.call((self._w, 'yview', '-pickplace') + what) | 
					
						
							| 
									
										
										
										
											1994-06-20 07:49:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-10-21 15:16:51 +00:00
										 |  |  | class _setit: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Internal class. It wraps the command in the widget OptionMenu.""" | 
					
						
							|  |  |  |     def __init__(self, var, value, callback=None): | 
					
						
							|  |  |  |         self.__value = value | 
					
						
							|  |  |  |         self.__var = var | 
					
						
							|  |  |  |         self.__callback = callback | 
					
						
							|  |  |  |     def __call__(self, *args): | 
					
						
							|  |  |  |         self.__var.set(self.__value) | 
					
						
							|  |  |  |         if self.__callback: | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             self.__callback(self.__value, *args) | 
					
						
							| 
									
										
										
										
											1996-10-21 15:16:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class OptionMenu(Menubutton): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """OptionMenu which allows the user to select a value from a menu.""" | 
					
						
							|  |  |  |     def __init__(self, master, variable, value, *values, **kwargs): | 
					
						
							|  |  |  |         """Construct an optionmenu widget with the parent MASTER, with
 | 
					
						
							|  |  |  |         the resource textvariable set to VARIABLE, the initially selected | 
					
						
							|  |  |  |         value VALUE, the other menu values VALUES and an additional | 
					
						
							|  |  |  |         keyword argument command."""
 | 
					
						
							|  |  |  |         kw = {"borderwidth": 2, "textvariable": variable, | 
					
						
							|  |  |  |               "indicatoron": 1, "relief": RAISED, "anchor": "c", | 
					
						
							|  |  |  |               "highlightthickness": 2} | 
					
						
							|  |  |  |         Widget.__init__(self, master, "menubutton", kw) | 
					
						
							|  |  |  |         self.widgetName = 'tk_optionMenu' | 
					
						
							|  |  |  |         menu = self.__menu = Menu(self, name="menu", tearoff=0) | 
					
						
							|  |  |  |         self.menuname = menu._w | 
					
						
							|  |  |  |         # 'command' is the only supported keyword | 
					
						
							|  |  |  |         callback = kwargs.get('command') | 
					
						
							|  |  |  |         if kwargs.has_key('command'): | 
					
						
							|  |  |  |             del kwargs['command'] | 
					
						
							|  |  |  |         if kwargs: | 
					
						
							|  |  |  |             raise TclError, 'unknown option -'+kwargs.keys()[0] | 
					
						
							|  |  |  |         menu.add_command(label=value, | 
					
						
							|  |  |  |                  command=_setit(variable, value, callback)) | 
					
						
							|  |  |  |         for v in values: | 
					
						
							|  |  |  |             menu.add_command(label=v, | 
					
						
							|  |  |  |                      command=_setit(variable, v, callback)) | 
					
						
							|  |  |  |         self["menu"] = menu | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __getitem__(self, name): | 
					
						
							|  |  |  |         if name == 'menu': | 
					
						
							|  |  |  |             return self.__menu | 
					
						
							|  |  |  |         return Widget.__getitem__(self, name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def destroy(self): | 
					
						
							|  |  |  |         """Destroy this widget and the associated menu.""" | 
					
						
							|  |  |  |         Menubutton.destroy(self) | 
					
						
							|  |  |  |         self.__menu = None | 
					
						
							| 
									
										
										
										
											1995-09-01 20:35:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-08-04 03:50:29 +00:00
										 |  |  | class Image: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Base class for images.""" | 
					
						
							| 
									
										
										
										
											2000-09-08 16:28:30 +00:00
										 |  |  |     _last_id = 0 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def __init__(self, imgtype, name=None, cnf={}, master=None, **kw): | 
					
						
							|  |  |  |         self.name = None | 
					
						
							|  |  |  |         if not master: | 
					
						
							|  |  |  |             master = _default_root | 
					
						
							|  |  |  |             if not master: | 
					
						
							|  |  |  |                 raise RuntimeError, 'Too early to create image' | 
					
						
							|  |  |  |         self.tk = master.tk | 
					
						
							|  |  |  |         if not name: | 
					
						
							| 
									
										
										
										
											2000-09-08 16:28:30 +00:00
										 |  |  |             Image._last_id += 1 | 
					
						
							| 
									
										
										
										
											2004-02-12 17:35:32 +00:00
										 |  |  |             name = "pyimage%r" % (Image._last_id,) # tk itself would use image<x> | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |             # The following is needed for systems where id(x) | 
					
						
							|  |  |  |             # can return a negative number, such as Linux/m68k: | 
					
						
							|  |  |  |             if name[0] == '-': name = '_' + name[1:] | 
					
						
							|  |  |  |         if kw and cnf: cnf = _cnfmerge((cnf, kw)) | 
					
						
							|  |  |  |         elif kw: cnf = kw | 
					
						
							|  |  |  |         options = () | 
					
						
							|  |  |  |         for k, v in cnf.items(): | 
					
						
							|  |  |  |             if callable(v): | 
					
						
							|  |  |  |                 v = self._register(v) | 
					
						
							|  |  |  |             options = options + ('-'+k, v) | 
					
						
							|  |  |  |         self.tk.call(('image', 'create', imgtype, name,) + options) | 
					
						
							|  |  |  |         self.name = name | 
					
						
							|  |  |  |     def __str__(self): return self.name | 
					
						
							|  |  |  |     def __del__(self): | 
					
						
							|  |  |  |         if self.name: | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 self.tk.call('image', 'delete', self.name) | 
					
						
							|  |  |  |             except TclError: | 
					
						
							|  |  |  |                 # May happen if the root was destroyed | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |     def __setitem__(self, key, value): | 
					
						
							|  |  |  |         self.tk.call(self.name, 'configure', '-'+key, value) | 
					
						
							|  |  |  |     def __getitem__(self, key): | 
					
						
							|  |  |  |         return self.tk.call(self.name, 'configure', '-'+key) | 
					
						
							|  |  |  |     def configure(self, **kw): | 
					
						
							|  |  |  |         """Configure the image.""" | 
					
						
							|  |  |  |         res = () | 
					
						
							|  |  |  |         for k, v in _cnfmerge(kw).items(): | 
					
						
							|  |  |  |             if v is not None: | 
					
						
							|  |  |  |                 if k[-1] == '_': k = k[:-1] | 
					
						
							|  |  |  |                 if callable(v): | 
					
						
							|  |  |  |                     v = self._register(v) | 
					
						
							|  |  |  |                 res = res + ('-'+k, v) | 
					
						
							|  |  |  |         self.tk.call((self.name, 'config') + res) | 
					
						
							|  |  |  |     config = configure | 
					
						
							|  |  |  |     def height(self): | 
					
						
							|  |  |  |         """Return the height of the image.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('image', 'height', self.name)) | 
					
						
							|  |  |  |     def type(self): | 
					
						
							|  |  |  |         """Return the type of the imgage, e.g. "photo" or "bitmap".""" | 
					
						
							|  |  |  |         return self.tk.call('image', 'type', self.name) | 
					
						
							|  |  |  |     def width(self): | 
					
						
							|  |  |  |         """Return the width of the image.""" | 
					
						
							|  |  |  |         return getint( | 
					
						
							|  |  |  |             self.tk.call('image', 'width', self.name)) | 
					
						
							| 
									
										
										
										
											1995-08-04 03:50:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class PhotoImage(Image): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Widget which can display colored images in GIF, PPM/PGM format.""" | 
					
						
							|  |  |  |     def __init__(self, name=None, cnf={}, master=None, **kw): | 
					
						
							|  |  |  |         """Create an image with NAME.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Valid resource names: data, format, file, gamma, height, palette, | 
					
						
							|  |  |  |         width."""
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         Image.__init__(self, 'photo', name, cnf, master, **kw) | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def blank(self): | 
					
						
							|  |  |  |         """Display a transparent image.""" | 
					
						
							|  |  |  |         self.tk.call(self.name, 'blank') | 
					
						
							|  |  |  |     def cget(self, option): | 
					
						
							|  |  |  |         """Return the value of OPTION.""" | 
					
						
							|  |  |  |         return self.tk.call(self.name, 'cget', '-' + option) | 
					
						
							|  |  |  |     # XXX config | 
					
						
							|  |  |  |     def __getitem__(self, key): | 
					
						
							|  |  |  |         return self.tk.call(self.name, 'cget', '-' + key) | 
					
						
							|  |  |  |     # XXX copy -from, -to, ...? | 
					
						
							|  |  |  |     def copy(self): | 
					
						
							|  |  |  |         """Return a new PhotoImage with the same image as this widget.""" | 
					
						
							|  |  |  |         destImage = PhotoImage() | 
					
						
							|  |  |  |         self.tk.call(destImage, 'copy', self.name) | 
					
						
							|  |  |  |         return destImage | 
					
						
							|  |  |  |     def zoom(self,x,y=''): | 
					
						
							|  |  |  |         """Return a new PhotoImage with the same image as this widget
 | 
					
						
							|  |  |  |         but zoom it with X and Y."""
 | 
					
						
							|  |  |  |         destImage = PhotoImage() | 
					
						
							|  |  |  |         if y=='': y=x | 
					
						
							|  |  |  |         self.tk.call(destImage, 'copy', self.name, '-zoom',x,y) | 
					
						
							|  |  |  |         return destImage | 
					
						
							|  |  |  |     def subsample(self,x,y=''): | 
					
						
							|  |  |  |         """Return a new PhotoImage based on the same image as this widget
 | 
					
						
							|  |  |  |         but use only every Xth or Yth pixel."""
 | 
					
						
							|  |  |  |         destImage = PhotoImage() | 
					
						
							|  |  |  |         if y=='': y=x | 
					
						
							|  |  |  |         self.tk.call(destImage, 'copy', self.name, '-subsample',x,y) | 
					
						
							|  |  |  |         return destImage | 
					
						
							|  |  |  |     def get(self, x, y): | 
					
						
							|  |  |  |         """Return the color (red, green, blue) of the pixel at X,Y.""" | 
					
						
							|  |  |  |         return self.tk.call(self.name, 'get', x, y) | 
					
						
							|  |  |  |     def put(self, data, to=None): | 
					
						
							|  |  |  |         """Put row formated colors to image starting from
 | 
					
						
							|  |  |  |         position TO, e.g. image.put("{red green} {blue yellow}", to=(4,6))"""
 | 
					
						
							|  |  |  |         args = (self.name, 'put', data) | 
					
						
							|  |  |  |         if to: | 
					
						
							|  |  |  |             if to[0] == '-to': | 
					
						
							|  |  |  |                 to = to[1:] | 
					
						
							|  |  |  |             args = args + ('-to',) + tuple(to) | 
					
						
							|  |  |  |         self.tk.call(args) | 
					
						
							|  |  |  |     # XXX read | 
					
						
							|  |  |  |     def write(self, filename, format=None, from_coords=None): | 
					
						
							|  |  |  |         """Write image to file FILENAME in FORMAT starting from
 | 
					
						
							|  |  |  |         position FROM_COORDS."""
 | 
					
						
							|  |  |  |         args = (self.name, 'write', filename) | 
					
						
							|  |  |  |         if format: | 
					
						
							|  |  |  |             args = args + ('-format', format) | 
					
						
							|  |  |  |         if from_coords: | 
					
						
							|  |  |  |             args = args + ('-from',) + tuple(from_coords) | 
					
						
							|  |  |  |         self.tk.call(args) | 
					
						
							| 
									
										
										
										
											1995-08-04 03:50:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class BitmapImage(Image): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     """Widget which can display a bitmap.""" | 
					
						
							|  |  |  |     def __init__(self, name=None, cnf={}, master=None, **kw): | 
					
						
							|  |  |  |         """Create a bitmap with NAME.
 | 
					
						
							| 
									
										
										
										
											2000-06-29 16:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |         Valid resource names: background, data, file, foreground, maskdata, maskfile."""
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         Image.__init__(self, 'bitmap', name, cnf, master, **kw) | 
					
						
							| 
									
										
										
										
											1995-08-04 03:50:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def image_names(): return _default_root.tk.call('image', 'names') | 
					
						
							|  |  |  | def image_types(): return _default_root.tk.call('image', 'types') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Spinbox(Widget): | 
					
						
							|  |  |  |     """spinbox widget.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a spinbox widget with the parent MASTER.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         STANDARD OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             activebackground, background, borderwidth, | 
					
						
							|  |  |  |             cursor, exportselection, font, foreground, | 
					
						
							|  |  |  |             highlightbackground, highlightcolor, | 
					
						
							|  |  |  |             highlightthickness, insertbackground, | 
					
						
							|  |  |  |             insertborderwidth, insertofftime, | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             insertontime, insertwidth, justify, relief, | 
					
						
							|  |  |  |             repeatdelay, repeatinterval, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             selectbackground, selectborderwidth | 
					
						
							|  |  |  |             selectforeground, takefocus, textvariable | 
					
						
							|  |  |  |             xscrollcommand. | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         WIDGET-SPECIFIC OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             buttonbackground, buttoncursor, | 
					
						
							|  |  |  |             buttondownrelief, buttonuprelief, | 
					
						
							|  |  |  |             command, disabledbackground, | 
					
						
							|  |  |  |             disabledforeground, format, from, | 
					
						
							|  |  |  |             invalidcommand, increment, | 
					
						
							|  |  |  |             readonlybackground, state, to, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             validate, validatecommand values, | 
					
						
							|  |  |  |             width, wrap, | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'spinbox', cnf, kw) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def bbox(self, index): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Return a tuple of X1,Y1,X2,Y2 coordinates for a
 | 
					
						
							|  |  |  |         rectangle which encloses the character given by index. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The first two elements of the list give the x and y | 
					
						
							|  |  |  |         coordinates of the upper-left corner of the screen | 
					
						
							|  |  |  |         area covered by the character (in pixels relative | 
					
						
							|  |  |  |         to the widget) and the last two elements give the | 
					
						
							|  |  |  |         width and height of the character, in pixels. The | 
					
						
							|  |  |  |         bounding box may refer to a region outside the | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         visible area of the window. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'bbox', index) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def delete(self, first, last=None): | 
					
						
							|  |  |  |         """Delete one or more elements of the spinbox.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         First is the index of the first character to delete, | 
					
						
							|  |  |  |         and last is the index of the character just after | 
					
						
							|  |  |  |         the last one to delete. If last isn't specified it | 
					
						
							|  |  |  |         defaults to first+1, i.e. a single character is | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         deleted.  This command returns an empty string. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'delete', first, last) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def get(self): | 
					
						
							|  |  |  |         """Returns the spinbox's string""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'get') | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def icursor(self, index): | 
					
						
							|  |  |  |         """Alter the position of the insertion cursor.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         The insertion cursor will be displayed just before | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         the character given by index. Returns an empty string | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'icursor', index) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def identify(self, x, y): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Returns the name of the widget at position x, y
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         Return value is one of: none, buttondown, buttonup, entry | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'identify', x, y) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def index(self, index): | 
					
						
							|  |  |  |         """Returns the numerical index corresponding to index
 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'index', index) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def insert(self, index, s): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Insert string s at index
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |          Returns an empty string. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'insert', index, s) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def invoke(self, element): | 
					
						
							|  |  |  |         """Causes the specified element to be invoked
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         The element could be buttondown or buttonup | 
					
						
							|  |  |  |         triggering the action associated with it. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'invoke', element) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def scan(self, *args): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call((self._w, 'scan') + args)) or () | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def scan_mark(self, x): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Records x and the current view in the spinbox window;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         used in conjunction with later scan dragto commands. | 
					
						
							|  |  |  |         Typically this command is associated with a mouse button | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         press in the widget. It returns an empty string. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.scan("mark", x) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def scan_dragto(self, x): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Compute the difference between the given x argument
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         and the x argument to the last scan mark command | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         It then adjusts the view left or right by 10 times the | 
					
						
							|  |  |  |         difference in x-coordinates. This command is typically | 
					
						
							|  |  |  |         associated with mouse motion events in the widget, to | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         produce the effect of dragging the spinbox at high speed | 
					
						
							|  |  |  |         through the window. The return value is an empty string. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.scan("dragto", x) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def selection(self, *args): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call((self._w, 'selection') + args)) or () | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def selection_adjust(self, index): | 
					
						
							|  |  |  |         """Locate the end of the selection nearest to the character
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         given by index, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Then adjust that end of the selection to be at index | 
					
						
							|  |  |  |         (i.e including but not going beyond index). The other | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         end of the selection is made the anchor point for future | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         select to commands. If the selection isn't currently in | 
					
						
							|  |  |  |         the spinbox, then a new selection is created to include | 
					
						
							|  |  |  |         the characters between index and the most recent selection | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         anchor point, inclusive. Returns an empty string. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.selection("adjust", index) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def selection_clear(self): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Clear the selection
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If the selection isn't in this widget then the | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         command has no effect. Returns an empty string. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.selection("clear") | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def selection_element(self, element=None): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Sets or gets the currently selected element.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If a spinbutton element is specified, it will be | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         displayed depressed | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.selection("element", element) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ########################################################################### | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LabelFrame(Widget): | 
					
						
							|  |  |  |     """labelframe widget.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a labelframe widget with the parent MASTER.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         STANDARD OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             borderwidth, cursor, font, foreground, | 
					
						
							|  |  |  |             highlightbackground, highlightcolor, | 
					
						
							|  |  |  |             highlightthickness, padx, pady, relief, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             takefocus, text | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         WIDGET-SPECIFIC OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             background, class, colormap, container, | 
					
						
							|  |  |  |             height, labelanchor, labelwidget, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             visual, width | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'labelframe', cnf, kw) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  | ######################################################################## | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PanedWindow(Widget): | 
					
						
							|  |  |  |     """panedwindow widget.""" | 
					
						
							|  |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         """Construct a panedwindow widget with the parent MASTER.
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         STANDARD OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             background, borderwidth, cursor, height, | 
					
						
							|  |  |  |             orient, relief, width | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         WIDGET-SPECIFIC OPTIONS | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             handlepad, handlesize, opaqueresize, | 
					
						
							|  |  |  |             sashcursor, sashpad, sashrelief, | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             sashwidth, showhandle, | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'panedwindow', cnf, kw) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def add(self, child, **kw): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Add a child widget to the panedwindow in a new pane.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The child argument is the name of the child widget | 
					
						
							|  |  |  |         followed by pairs of arguments that specify how to | 
					
						
							|  |  |  |         manage the windows. Options may have any of the values | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         accepted by the configure subcommand. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.tk.call((self._w, 'add', child) + self._options(kw)) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def remove(self, child): | 
					
						
							|  |  |  |         """Remove the pane containing child from the panedwindow
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         All geometry management options for child will be forgotten. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.tk.call(self._w, 'forget', child) | 
					
						
							|  |  |  |     forget=remove | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def identify(self, x, y): | 
					
						
							|  |  |  |         """Identify the panedwindow component at point x, y
 | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         If the point is over a sash or a sash handle, the result | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         is a two element list containing the index of the sash or | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         handle, and a word indicating whether it is over a sash | 
					
						
							|  |  |  |         or a handle, such as {0 sash} or {2 handle}. If the point | 
					
						
							|  |  |  |         is over any other part of the panedwindow, the result is | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         an empty list. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'identify', x, y) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def proxy(self, *args): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             self.tk.call((self._w, 'proxy') + args)) or () | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def proxy_coord(self): | 
					
						
							|  |  |  |         """Return the x and y pair of the most recent proxy location
 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.proxy("coord") | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def proxy_forget(self): | 
					
						
							|  |  |  |         """Remove the proxy from the display.
 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.proxy("forget") | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def proxy_place(self, x, y): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Place the proxy at the given x and y coordinates.
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         return self.proxy("place", x, y) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def sash(self, *args): | 
					
						
							|  |  |  |         """Internal function.""" | 
					
						
							|  |  |  |         return self._getints( | 
					
						
							|  |  |  |             self.tk.call((self._w, 'sash') + args)) or () | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def sash_coord(self, index): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Return the current x and y pair for the sash given by index.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Index must be an integer between 0 and 1 less than the | 
					
						
							|  |  |  |         number of panes in the panedwindow. The coordinates given are | 
					
						
							|  |  |  |         those of the top left corner of the region containing the sash. | 
					
						
							|  |  |  |         pathName sash dragto index x y This command computes the | 
					
						
							|  |  |  |         difference between the given coordinates and the coordinates | 
					
						
							|  |  |  |         given to the last sash coord command for the given sash. It then | 
					
						
							|  |  |  |         moves that sash the computed difference. The return value is the | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         empty string. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.sash("coord", index) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def sash_mark(self, index): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Records x and y for the sash given by index;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         Used in conjunction with later dragto commands to move the sash. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.sash("mark", index) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def sash_place(self, index, x, y): | 
					
						
							|  |  |  |         """Place the sash given by index at the given coordinates
 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.sash("place", index, x, y) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def panecget(self, child, option): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Query a management option for window.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         Option may be any value allowed by the paneconfigure subcommand | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.tk.call( | 
					
						
							|  |  |  |             (self._w, 'panecget') + (child, '-'+option)) | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |     def paneconfigure(self, tagOrId, cnf=None, **kw): | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         """Query or modify the management options for window.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         If no option is specified, returns a list describing all | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |         of the available options for pathName.  If option is | 
					
						
							|  |  |  |         specified with no value, then the command returns a list | 
					
						
							|  |  |  |         describing the one named option (this list will be identical | 
					
						
							|  |  |  |         to the corresponding sublist of the value returned if no | 
					
						
							|  |  |  |         option is specified). If one or more option-value pairs are | 
					
						
							|  |  |  |         specified, then the command modifies the given widget | 
					
						
							|  |  |  |         option(s) to have the given value(s); in this case the | 
					
						
							|  |  |  |         command returns an empty string. The following options | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         are supported: | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         after window | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             Insert the window after the window specified. window | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             should be the name of a window already managed by pathName. | 
					
						
							|  |  |  |         before window | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             Insert the window before the window specified. window | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             should be the name of a window already managed by pathName. | 
					
						
							|  |  |  |         height size | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             Specify a height for the window. The height will be the | 
					
						
							|  |  |  |             outer dimension of the window including its border, if | 
					
						
							|  |  |  |             any. If size is an empty string, or if -height is not | 
					
						
							|  |  |  |             specified, then the height requested internally by the | 
					
						
							|  |  |  |             window will be used initially; the height may later be | 
					
						
							|  |  |  |             adjusted by the movement of sashes in the panedwindow. | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             Size may be any value accepted by Tk_GetPixels. | 
					
						
							|  |  |  |         minsize n | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             Specifies that the size of the window cannot be made | 
					
						
							|  |  |  |             less than n. This constraint only affects the size of | 
					
						
							|  |  |  |             the widget in the paned dimension -- the x dimension | 
					
						
							|  |  |  |             for horizontal panedwindows, the y dimension for | 
					
						
							|  |  |  |             vertical panedwindows. May be any value accepted by | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             Tk_GetPixels. | 
					
						
							|  |  |  |         padx n | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             Specifies a non-negative value indicating how much | 
					
						
							|  |  |  |             extra space to leave on each side of the window in | 
					
						
							|  |  |  |             the X-direction. The value may have any of the forms | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             accepted by Tk_GetPixels. | 
					
						
							|  |  |  |         pady n | 
					
						
							|  |  |  |             Specifies a non-negative value indicating how much | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             extra space to leave on each side of the window in | 
					
						
							|  |  |  |             the Y-direction. The value may have any of the forms | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             accepted by Tk_GetPixels. | 
					
						
							|  |  |  |         sticky style | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             If a window's pane is larger than the requested | 
					
						
							|  |  |  |             dimensions of the window, this option may be used | 
					
						
							|  |  |  |             to position (or stretch) the window within its pane. | 
					
						
							|  |  |  |             Style is a string that contains zero or more of the | 
					
						
							|  |  |  |             characters n, s, e or w. The string can optionally | 
					
						
							|  |  |  |             contains spaces or commas, but they are ignored. Each | 
					
						
							|  |  |  |             letter refers to a side (north, south, east, or west) | 
					
						
							|  |  |  |             that the window will "stick" to. If both n and s | 
					
						
							|  |  |  |             (or e and w) are specified, the window will be | 
					
						
							|  |  |  |             stretched to fill the entire height (or width) of | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             its cavity. | 
					
						
							|  |  |  |         width size | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             Specify a width for the window. The width will be | 
					
						
							|  |  |  |             the outer dimension of the window including its | 
					
						
							|  |  |  |             border, if any. If size is an empty string, or | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             if -width is not specified, then the width requested | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  |             internally by the window will be used initially; the | 
					
						
							|  |  |  |             width may later be adjusted by the movement of sashes | 
					
						
							|  |  |  |             in the panedwindow. Size may be any value accepted by | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |             Tk_GetPixels. | 
					
						
							| 
									
										
										
										
											2003-04-06 09:01:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-13 10:22:08 +00:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         if cnf is None and not kw: | 
					
						
							|  |  |  |             cnf = {} | 
					
						
							|  |  |  |             for x in self.tk.split( | 
					
						
							|  |  |  |                 self.tk.call(self._w, | 
					
						
							|  |  |  |                          'paneconfigure', tagOrId)): | 
					
						
							|  |  |  |                 cnf[x[0][1:]] = (x[0][1:],) + x[1:] | 
					
						
							|  |  |  |             return cnf | 
					
						
							|  |  |  |         if type(cnf) == StringType and not kw: | 
					
						
							|  |  |  |             x = self.tk.split(self.tk.call( | 
					
						
							|  |  |  |                 self._w, 'paneconfigure', tagOrId, '-'+cnf)) | 
					
						
							|  |  |  |             return (x[0][1:],) + x[1:] | 
					
						
							|  |  |  |         self.tk.call((self._w, 'paneconfigure', tagOrId) + | 
					
						
							|  |  |  |                  self._options(cnf, kw)) | 
					
						
							|  |  |  |     paneconfig = paneconfigure | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def panes(self): | 
					
						
							|  |  |  |         """Returns an ordered list of the child panes.""" | 
					
						
							|  |  |  |         return self.tk.call(self._w, 'panes') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | ###################################################################### | 
					
						
							|  |  |  | # Extensions: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Studbutton(Button): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'studbutton', cnf, kw) | 
					
						
							|  |  |  |         self.bind('<Any-Enter>',       self.tkButtonEnter) | 
					
						
							|  |  |  |         self.bind('<Any-Leave>',       self.tkButtonLeave) | 
					
						
							|  |  |  |         self.bind('<1>',               self.tkButtonDown) | 
					
						
							|  |  |  |         self.bind('<ButtonRelease-1>', self.tkButtonUp) | 
					
						
							| 
									
										
										
										
											1994-06-27 07:55:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Tributton(Button): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     def __init__(self, master=None, cnf={}, **kw): | 
					
						
							|  |  |  |         Widget.__init__(self, master, 'tributton', cnf, kw) | 
					
						
							|  |  |  |         self.bind('<Any-Enter>',       self.tkButtonEnter) | 
					
						
							|  |  |  |         self.bind('<Any-Leave>',       self.tkButtonLeave) | 
					
						
							|  |  |  |         self.bind('<1>',               self.tkButtonDown) | 
					
						
							|  |  |  |         self.bind('<ButtonRelease-1>', self.tkButtonUp) | 
					
						
							|  |  |  |         self['fg']               = self['bg'] | 
					
						
							|  |  |  |         self['activebackground'] = self['bg'] | 
					
						
							| 
									
										
										
										
											1996-05-16 16:00:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-08-21 23:38:59 +00:00
										 |  |  | ###################################################################### | 
					
						
							|  |  |  | # Test: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _test(): | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     root = Tk() | 
					
						
							|  |  |  |     text = "This is Tcl/Tk version %s" % TclVersion | 
					
						
							|  |  |  |     if TclVersion >= 8.1: | 
					
						
							| 
									
										
										
										
											2000-08-09 18:51:01 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             text = text + unicode("\nThis should be a cedilla: \347", | 
					
						
							|  |  |  |                                   "iso-8859-1") | 
					
						
							|  |  |  |         except NameError: | 
					
						
							|  |  |  |             pass # no unicode support | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     label = Label(root, text=text) | 
					
						
							|  |  |  |     label.pack() | 
					
						
							|  |  |  |     test = Button(root, text="Click me!", | 
					
						
							|  |  |  |               command=lambda root=root: root.test.configure( | 
					
						
							|  |  |  |                   text="[%s]" % root.test['text'])) | 
					
						
							|  |  |  |     test.pack() | 
					
						
							|  |  |  |     root.test = test | 
					
						
							|  |  |  |     quit = Button(root, text="QUIT", command=root.destroy) | 
					
						
							|  |  |  |     quit.pack() | 
					
						
							|  |  |  |     # The following three commands are needed so the window pops | 
					
						
							|  |  |  |     # up on top on Windows... | 
					
						
							|  |  |  |     root.iconify() | 
					
						
							|  |  |  |     root.update() | 
					
						
							|  |  |  |     root.deiconify() | 
					
						
							|  |  |  |     root.mainloop() | 
					
						
							| 
									
										
										
										
											1996-08-21 23:38:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2000-08-09 18:03:12 +00:00
										 |  |  |     _test() |