Background
Rivet is a Python programming interface to the Tk toolkit (of Tcl/Tk fame). Rivet is object oriented, and easy to learn. Although the Rivet interface is intentionally organized similar to the Tcl's Tk interface, a distinguishing feature of Rivet's implementation is that it contains no Tcl code. Books on Tcl/Tk are suggested reading material. See http://www.sunlabs.com/research/tcl/docs.html for more information on available documentation.
The Basics
A rivetobj is the python object representing a tk "widget". These objects are created by functions in the rivet module. Typically, an application begins with the following statements:
import rivet top = rivet.init()In this example, top is a rivetobj that represents the topmost widget in a tk application (known to Tcl/Tk programmers as "."). This widget may then be used to create more widgets. For example, This code creates a scale widget inside the top widget, packs it, and runs the event loop:
widget1 = rivet.scale(top) rivet.pack(widget1) rivet.mainloop()Some widgets have convenience methods for shorthand creation of other widgets. The toplevel widget, for example, has "button", "checkbutton", etc. So the creation of widget1 in the previous example may be shortened to:
widget1 = top.scale()
Each rivetobj has a dictionary attached to it. This dictionary is intended to be used by applications, and it is not used by rivet internally. The dictionary can be populated using python instance.attribute notation. (E.g. "widget1.myname = 1" assigns "myname" to 1, "dir(widget1)" will report the keys in the dictionary, "del widget1.myname" will remove the reference from the dictionary, etc.) Attaching data to widget objects is a significant departure from the Tcl/Tk model, the main benefit from this appears to be less reliance on global variables.
Life Cycle Issues
Rivetobjs are created with an additional reference from the parent widget. As a result, they are not necessarily garbage collected (and destroyed) when all your references to it are removed. This relieves you from maintaining an additional reference to ensure the widget still exists.
Rivetobjs are explicitly destroyed by calling rivet.destroy(). This also destroys any rivetobjs that were created inside of the destroyed rivetobj, as well as releasing any references to callbacks used by the objects. A program may continue to have references to destroyed rivetobjs, but these references are essentially useless, and referring to any attribute of such a rivetobj will raise an exception.
Passing Parameters
Many rivet functions take an arbitrary number of parameters, depending on the function and its use. These typically appear in the same order as they would in Tcl/Tk. Arguments to rivet functions may be strings, integers, floats, but also may be lists, tuples, and dictionaries. Because the more complicated sequence and mapping types have no meaning to Tk, these are recursively flattened. Dictionaries are handled specially, the keys of dictionary elements are assumed to be tk attribute names and are automatically prepended with a hypen as required by tk. The following sets of statements illustrate equivalent operations:
widget1.configure( '-bg', 'white', '-fg', 'red', '-bd', 3) widget1.configure( {'bg': 'white'}, ('-fg', 'red'), ['-bd', 3]) widget1.configure( bg='white', fg='red', bd=3 ) rivet.pack(widget1, '-side', 'left', ('-fill', 'both'), '-expand', 1) rivet.pack(widget1, {'side':'left', 'fill':'both', 'expand':1}) rivet.pack(widget1, side='left', fill='both', expand=1)The keyword arguments only work in Python1.3 or greater, of course. For configuration option specifiers (those available though *cget and *configure interfaces), the leading hypen is optional. E.g. "bg" and "-bg" are the same. For functions such as "pack", the leading hyphen can only be dropped if using keyword arguments or dictionary arguments.
One interesting trick to shorten code or to ease porting from Tcl/Tk is to use python's split function to simplify argument processing. For example, the following two examples have the same effect:
widget1.configure('-bg', 'white', '-fg', 'black', '-relief', 'raised', '-bd', 3) import string spl = string.split widget1.configure(spl('-bg white -fg black -relief raised -bd 3'))
Callbacks
Callbacks can be passed as arguments using two forms: a callable without arguments, or a callable as the first item in a tuple with an arbitrary number of additional parameters (the parameters are passed to the callback when it is invoked). Callables may be builtins, python defined functions, and python instance-methods. The use of tuples with callbacks is the one exception to the flattening of function arguments as stated above.
In some cases, parameters to callables are prepended with data. For example, the command callback for a scale always receives a float object representing the new position of the scale as its first argument. The following sample implements a callback for the ongoing example, using a tuple declaration of the callback to pass in a printable message:
def scale_moved(newvalue, message): print message, newvalue widget1.configure(command = (scale_moved, 'The new value is:'))Using Rivet with Python classes
To enable building abstractions for collections of widgets, object instances that contain rivetobjs may be used as arguments to rivet functions if they follow a naming convention. This convention uses a "__widget" attribute. For example, here is an example of a scale widget class wink built using trivial classes:
import rivet class nudge: def __init__(self): self.__widget = rivet.init() class wink: def __init__(self, parent, *initialoptions1, **initialoptions2): self.__widget = rivet.scale(parent, initialoptions1, initialoptions2) __getattr__ = rivet.__getattr__ top = nudge() widget1 = wink(top, 'showvalue', 0) widget1.pack() rivet.mainloop()The function rivet.__getattr__ allows instances to "inherit" the functions from the widgets that they wrap. The usage widget1.pack() above is an example of this: pack is a method of the scale object and available to the instance through python's __getattr__ mechanism.
The wink.__init__ method declaration shows how to declare and pass arguments so that initial tk configuration options are passed along with the creation of the widget. See the python documentation for more details on variable argument length and keyword arguments.
Using variables
Tk has it's own set of variables that you can get access to through the stringvar, intvar, and floatvar classes. These are defined in rivetutil.py. You may subclass from these classes for other types. Once instanciated, you may change the value of the variable with the set method, retrieve its value with the get method, monitor changes to it with the trace method. You can also pass the variable instance to a rivet function. Typically, this is used with variable options on widgets. For example, the varexample.py sample program makes use of this to automatically update the contents of a label widget based on the value of a scale widget.
There is a lower level set of variable manipulation routines defined inside the rivet module, but these are not recommended for use.
Comparison to Tcl/Tk
Rivet is very much like Tcl/Tk in many respects. There are a few comparisons that can be made to illuminate the differences:
after Schedules a callback to be invoked later, and returns an object that can be used to cancel the invocation. If no callback is specified, execution will pause for the time specified. Example: timer1 = rivet.after(1000, callback) timer2 = rivet.after('idle', callback) timer2.cancel() bell Rings the display bell. Pass either no arguments for the default display or a rivetobj from which to determine the display. bind Set or query bindings for a rivetobj. Usually you pass in a rivetobj or instance for the first argument, but you can also pass in a string for the first argument to set or query a class of bindings. Usage: Returns: rivet.bind(id) String description of bindings rivet.bind(id, string) Tuple of callbacks rivet.bind(id, string, callback) None rivet.bind(id, string, callback, append) None Where append is any value. id indicates a class name (a string), a rivetobj, or an instance. As a string, class name refers to the Tk id for a class, such as "Button", "Scale", or may be a set of bindings of your own creation for use with rivet.bindtags. A shorthand method exists for this function. For example widget1.bind('<1>', callback, 1) is equivalent to rivet.bind(widget1, '<1>', callback, 1). The callback may be a simple callable, or it may be a tuple with the first item as a callable. The remaining tuple items have special meaning if they are string objects with the first character as a percent symbol. These items are substituted with values (either a string or an integer) when the event occurs. These conversions correspond directly to substitutions done by Tcl/Tk's bind. The following example illustrates this feature. import rivet def print_click_position(widget, xposition, yposition): print 'widget ', widget, 'clicked at', xposition, yposition top = rivet.init() button = top.button('text', 'click me') button.bind('<1>', (print_click_position, '%w', '%x', '%y'), 1) rivet.mainloop() A function invoked by bind returning anything other than None will stop any further invocations of function invocations for bindings that match that event. None is equivalent to Tk's continue, and any other value is equivalent to Tk's break. bindtags Implements Tk's bindtags features. Usage: Returns: rivet.bindtags(rivetobj) Tuple of rivetobjs and strings rivet.bindtags(rivetobj, ...) None clipboard Manipulates the Tk clipboard. Usage: Returns: rivet.clipboard.clear(...) None rivet.clipboard.append(...) None destroy Destroys a Tk object. Usage: Returns: rivet.destroy(id) None Where id is a rivetobj or a instance. fileevent Given a file descriptor, a mode ("readable" or "writeable") and a function, fileevent schedules a callback to be invoked when I/O is ready. Without a callback arg, this returns the function assigned previously. The callback may be removed by passing in None for the third argument. The file descriptor should be an unbuffered file object, such as a pipe. Usage: Returns: rivet.fileevent(fd, mode, callback) None focus Manage the input focus. Usage: Returns: rivet.focus() A Rivetobj or None rivet.focus(...) A string object getvar The routines getvar, setvar, unsetvar, tracevar, and untracevar are lowlevel routines to manage tk variables. The recommended interfaces are the stringvar, intvar, and floatvar classes in rivetutil.py. grab Confine pointer and keyboard events to a window sub-tree. Usage: Returns: rivet.grab.current(...) A tuple of Rivetobjs rivet.grab.release(...) None rivet.grab.set(...) None rivet.grab.status(...) A String object or None image Create and manipulate images. Usage: Returns: rivet.image.create(...) Rivet image object rivet.image.delete(Rivet image object) None rivet.image.height(Rivet image object) Int rivet.image.width(Rivet image object) Int rivet.image.names() A dictionary rivet.image.types() A tuple of strings rivet.image.type(Rivet image object) String Rivet "bitmap" image objects have the following methods: bitmap_image.cget(optionname) depends on argument bitmap_image.configure(...) depends on arguments Rivet "photo" image objects have the following methods: photo_image.blank(...) A string or None photo_image.cget(optionname) depends on argument photo_image.configure(...) depends on arguments photo_image.copy(...) A string or None photo_image.get(...) A tuple of ints photo_image.put(...) A string or None photo_image.read(...) A string or None photo_image.redither() None photo_image.write(...) A string or None init Initialize rivet. The arguments may specify the values for any of the following attributes "-display", "-geometry", "-name", "-sync". Usage: Returns: rivet.init(...) The "." rivetobj lower Lowers a windows position in the window stacking order. rivet.lower(...) None mainloop Run the event processing loop. Usage: rivet.mainloop() None. mainwidget Returns the "." rivetobj. Usage: Returns: rivet.mainwidget() The "." rivetobj option Add/retrieve window options to/from the option database Usage: Returns: rivet.option.add(...) None rivet.option.clear() None rivet.option.get(...) A string or None rivet.option.readfile(...) None pack Usage: Returns: rivet.pack(...) None rivet.pack.forget(rivetobj) None rivet.pack.info(rivetobj) A tuple containing pack information rivet.pack.propagate(...) A string or None rivet.pack.slaves(rivetobj) A tuple of rivetobjs. place Usage: Returns: rivet.place(...) None rivet.place.forget(rivetobj) None rivet.place.info(rivetobj) A tuple containing pack information rivet.place.propagate(...) A string or None rivet.place.slaves(rivetobj) A tuple of rivetobjs. raise Raises a windows position in the window stacking order. rivet.raise(...) None selection Manipulate the X selection Usage: Returns: rivet.selection.clear(...) None rivet.selection.get(...) A string rivet.selection.handle(...) None rivet.selection.own(...) None setvar The routines getvar, setvar, unsetvar, tracevar, and untracevar are lowlevel routines to manage tk variables. The recommended interfaces are the stringvar, intvar, and floatvar classes in rivetutil.py. tk_appname Sets the name of the application. Typically used for setting the main window's title string. Usage: Returns: rivet.tk_appname(...) The current value, a string. tkwait Usage: Returns: rivet.tkwait.variable(...) none rivet.tkwait.visibility(...) none rivet.tkwait.window(...) none tracevar The routines getvar, setvar, unsetvar, tracevar, and untracevar are lowlevel routines to manage tk variables. The recommended interfaces are the stringvar, intvar, and floatvar classes in rivetutil.py. unsetvar The routines getvar, setvar, unsetvar, tracevar, and untracevar are lowlevel routines to manage tk variables. The recommended interfaces are the stringvar, intvar, and floatvar classes in rivetutil.py. untracevar The routines getvar, setvar, unsetvar, tracevar, and untracevar are lowlevel routines to manage tk variables. The recommended interfaces are the stringvar, intvar, and floatvar classes in rivetutil.py. update Usage: Returns: rivet.update() none rivet.update('idletasks') none winfo Implements the Tk winfo command. Usage: Returns: rivet.winfo.atom(...) integer rivet.winfo.atomname(...) string rivet.winfo.cells(...) integer rivet.winfo.children(...) tuple of rivetobjs rivet.winfo._class(...) string (same as "winfo class") rivet.winfo.containing(...) rivetobj rivet.winfo.depth(...) integer rivet.winfo.exists(...) integer rivet.winfo.fpixels(...) float rivet.winfo.geometry(...) string rivet.winfo.height(...) integer rivet.winfo.id(...) string rivet.winfo.ismapped(...) integer rivet.winfo.manager(...) string or none rivet.winfo.parent(...) rivetobj rivet.winfo.pathname(...) rivetobj rivet.winfo.pixels(...) integer rivet.winfo.reqheight(...) integer rivet.winfo.reqwidth(...) integer rivet.winfo.rgb(...) tuple of integers rivet.winfo.screen(...) string rivet.winfo.screencells(...) integer rivet.winfo.screendepth(...) integer rivet.winfo.screenheight(...) integer rivet.winfo.screenmmheight(...) integer rivet.winfo.screenmmwidth(...) integer rivet.winfo.screenvisual(...) string rivet.winfo.screenwidth(...) integer rivet.winfo.toplevel(...) rivetobj rivet.winfo.viewable(...) integer rivet.winfo.visual(...) string or none rivet.winfo.visualsavailable(...) string rivet.winfo.vrootheight(...) integer rivet.winfo.vrootwidth(...) integer rivet.winfo.vrootx(...) integer rivet.winfo.vrooty(...) integer rivet.winfo.width(...) integer rivet.winfo.x(...) integer rivet.winfo.y(...) integer A Rivet equivalent for Tk's "winfo interps" or "winfo name" does not exist. wm Usage: Returns: rivet.wm.aspect(...) tuple of integers rivet.wm.client(...) string or none rivet.wm.colormapwindows(...) tuple of rivetobjs rivet.wm.command(...) string or none rivet.wm.deiconify(...) none rivet.wm.focusmodel(...) string rivet.wm.frame(...) string rivet.wm.geometry(...) string rivet.wm.grid(...) tuple of integers rivet.wm.group(...) rivetobj rivet.wm.iconbitmap(...) string rivet.wm.iconify(...) none rivet.wm.iconmask(...) string rivet.wm.iconname(...) string rivet.wm.iconposition(...) tuple of integers rivet.wm.iconwindow(...) rivetobj rivet.wm.maxsize(...) tuple of integers rivet.wm.minsize(...) tuple of integers rivet.wm.overrideredirect(...) integer rivet.wm.positionfrom(...) string or none rivet.wm.resizable(...) tuple of integers rivet.wm.sizefrom(...) string rivet.wm.state(...) string or none rivet.wm.title(...) string rivet.wm.tracing(...) string rivet.wm.transient(...) rivetobj rivet.wm.withdraw(...) none rivet.wm.protocol(...) tuple of strings|callback|none Widget creation commands These functions return a newly created rivetobj. The first parameter identifies the parent, the second parameter identifies the name of the widget (not the whole path as in Tcl/Tk, but it must start with a dot, as in ".mywidget"). The name parameter is optional, and is useful with the option database. Any remaining arguments are configuration options. rivet.button(...) rivet.canvas(...) rivet.checkbutton(...) rivet.entry(...) rivet.frame(...) rivet.label(...) rivet.listbox(...) rivet.menu(...) rivet.menubutton(...) rivet.message(...) rivet.radiobutton(...) rivet.scale(...) rivet.scrollbar(...) rivet.text(...) rivet.toplevel(...) Most rivetobjs have shorthands methods for creating children. For example, to create a new button under a frame, use the button method on the frame object. In this case the parent is implied and is not needed for the first argument. Shorthand for creation of widgets: newwidget = parentwidget.newwidgetclass([name], args...)Rivetobj methods
Each rivetobj has a number of methods associated with it, the set of methods available depends on the type of the widget. All rivetobjs have cget and configure methods, which preform identical to the Tk equivalent. The type of the return value to these operation depends on the arguments. For cget, it may be integer, float, string, callback, or rivetobj. For configure, it may be None if the option is being specified, a tuple describing the option (name, dbname, dbclass, default value, value), or a tuple of descriptive tuples. Most rivetobjs have these shorthand methods: menu, toplevel, pack, place, bind, parent, children, name, destroy. Where appropriate, rivetobjs have a larger set of these methods: button, canvas, checkbutton, entry, frame, label, listbox menu, menubutton, message, radiobutton, scale, scrollbar text, toplevel. The shorthand methods operate the same as the function by the same name in the rivet module, but self is automatically implied as the first parameter. For example, the following two statements are equivalent: rivet.pack(button1, '-side', 'left') button1.pack('-side', 'left') Note for the canvas and text objects: The method tag_bind is binds an event to a canvas item callback, as provides the same functionality as Tk's canvas bind item method. The name has only been changed to avoid conflict with the bind shorthand method. button methods Usage: Returns: w.bind(...) depends on arguments w.cget(...) depends on arguments w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.destroy(...) none w.flash(...) none w.invoke(...) none w.menu(...) new menu rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.toplevel(...) new toplevel rivetobj canvas methods Usage: Returns: w.addtag(...) none w.bbox(...) tuple of ints w.bind(...) depends on arguments w.button(...) new button rivetobj w.canvas(...) new canvas rivetobj w.canvasx(...) float w.canvasy(...) float w.cget(...) depends on arguments w.checkbutton(...) new checkbutton rivetobj w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.coords(...) tuple of ints w.create(...) string w.dchars(...) none w.delete(...) none w.destroy(...) none w.dtag(...) none w.entry(...) new entry rivetobj w.find(...) typle of strings w.focus(...) integer or none w.frame(...) new frame rivetobj w.gettags(...) tuple of strings w.icursor(...) none w.index(...) string w.insert(...) none w.itemcget(...) depends on arguments w.itemconfigure(...) depends on arguments w.label(...) new label rivetobj w.listbox(...) new listbox rivetobj w.lower(...) none w.menu(...) new menu rivetobj w.menubutton(...) new menubutton rivetobj w.message(...) new message rivetobj w.name() a string, widget's resource id w.move(...) none w.pack(...) none w.parent(...) rivetobj w.place(...) none w.postscript(...) # not implemented yet w.radiobutton(...) new radiobutton rivetobj w.raise(...) none w.scale(...) none w.scan_dragto(...) none w.scan_mark(...) none w.scrollbar(...) new scrollbar rivetobj w.select_adjust(...) none w.select_clear(...) none w.select_from(...) none w.select_item(...) string w.select_to(...) none w.tag_bind(...) depends on arguments w.text(...) new text rivetobj w.toplevel(...) new toplevel rivetobj w.type(...) string or none w.xview(...) tuple of two floats or () w.yview(...) tuple of two floats or () checkbutton methods Usage: Returns: w.bind(...) depends on arguments w.cget(...) depends on arguments w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.deselect(...) none w.destroy(...) none w.flash(...) none w.invoke(...) none w.menu(...) new menu rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.select(...) none w.toggle(...) none w.toplevel(...) new toplevel rivetobj entry methods w.bind(...) depends on arguments w.cget(...) depends on arguments w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.delete(...) none w.destroy(...) none w.get(...) string w.icursor(...) none w.index(...) int w.insert(...) none w.menu(...) new menu rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.scan_dragto(...) none w.scan_mark(...) none w.selection_adjust(...) none w.selection_clear(...) none w.selection_from(...) none w.selection_present(...) int w.selection_range(...) none w.selection_to(...) none w.toplevel(...) new toplevel rivetobj w.xview(...) tuple of two floats or () frame methods Usage: Returns: w.bind(...) depends on arguments w.button(...) new button rivetobj w.canvas(...) new canvas rivetobj w.cget(...) depends on arguments w.checkbutton(...) new checkbutton rivetobj w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.destroy(...) none w.entry(...) new entry rivetobj w.frame(...) new frame rivetobj w.label(...) new label rivetobj w.listbox(...) new listbox rivetobj w.menu(...) new menu rivetobj w.menubutton(...) new menubutton rivetobj w.message(...) new message rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.radiobutton(...) new radiobutton rivetobj w.scale(...) new scale rivetobj w.scrollbar(...) new scrollbar rivetobj w.text(...) new text rivetobj w.toplevel(...) new toplevel rivetobj label methods Usage: Returns: w.bind(...) depends on arguments w.button(...) new button rivetobj w.canvas(...) new canvas rivetobj w.cget(...) depends on arguments w.checkbutton(...) new checkbutton rivetobj w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.destroy(...) none w.entry(...) new entry rivetobj w.frame(...) new frame rivetobj w.label(...) new label rivetobj w.listbox(...) new listbox rivetobj w.menu(...) new menu rivetobj w.menubutton(...) new menubutton rivetobj w.message(...) new message rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.radiobutton(...) new radiobutton rivetobj w.scale(...) new scale rivetobj w.scrollbar(...) new scrollbar rivetobj w.text(...) new text rivetobj w.toplevel(...) new toplevel rivetobj listbox methods Usage: Returns: w.activate(...) none w.bbox(...) tuple of ints w.bind(...) depends on arguments w.cget(...) depends on arguments w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.curselection(...) tuple of ints w.delete(...) none w.destroy(...) none w.get(...) a string (1 index given) or a tuple of strings (2 indexes) w.index(...) integer w.insert(...) none w.menu(...) new menu rivetobj w.name() a string, widget's resource id w.nearest(...) integer w.pack(...) none w.parent(...) rivetobj w.place(...) none w.scan_dragto(...) none w.scan_mark(...) none w.see(...) none w.selection_anchor(...) none w.selection_clear(...) none w.selection_includes(...) integer w.selection_set(...) none w.size(...) integer w.toplevel(...) new toplevel rivetobj w.xview(...) tuple of two floats or () w.yview(...) tuple of two floats or () menu methods Usage: Returns: w.activate(...) none w.add(...) none w.bind(...) depends on arguments w.cget(...) depends on arguments w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.delete(...) none w.destroy(...) none w.entrycget(...) depends on arguments w.entryconfigure(...) depends on arguments w.index(...) string w.insert(...) none w.invoke(...) none w.menu(...) new menu rivetobj w.name() a string, widget's resource id w.parent(...) rivetobj w.post(...) none w.postcascade(...) none w.toplevel(...) new toplevel rivetobj w.type(...) string or none w.unpost(...) none w.yposition(...) integer menubutton methods Usage: Returns: w.bind(...) depends on arguments w.button(...) new button rivetobj w.canvas(...) new canvas rivetobj w.cget(...) depends on arguments w.checkbutton(...) new checkbutton rivetobj w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.destroy(...) none w.entry(...) new entry rivetobj w.frame(...) new frame rivetobj w.label(...) new label rivetobj w.listbox(...) new listbox rivetobj w.menu(...) new menu rivetobj w.menubutton(...) new menubutton rivetobj w.message(...) new message rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.radiobutton(...) new radiobutton rivetobj w.scale(...) new scale rivetobj w.scrollbar(...) new scrollbar rivetobj w.text(...) new text rivetobj w.toplevel(...) new toplevel rivetobj message methods Usage: Returns: w.bind(...) depends on arguments w.button(...) new button rivetobj w.canvas(...) new canvas rivetobj w.cget(...) depends on arguments w.checkbutton(...) new checkbutton rivetobj w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.destroy(...) none w.entry(...) new entry rivetobj w.frame(...) new frame rivetobj w.label(...) new label rivetobj w.listbox(...) new listbox rivetobj w.menu(...) new menu rivetobj w.menubutton(...) new menubutton rivetobj w.message(...) new message rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.radiobutton(...) new radiobutton rivetobj w.scale(...) new scale rivetobj w.scrollbar(...) new scrollbar rivetobj w.text(...) new text rivetobj w.toplevel(...) new toplevel rivetobj radiobutton methods Usage: Returns: w.bind(...) depends on arguments w.cget(...) depends on arguments w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.deselect(...) none w.destroy(...) none w.flash(...) none w.invoke(...) none w.menu(...) new menu rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.select(...) none w.toplevel(...) new toplevel rivetobj scale methods Usage: Returns: w.bind(...) depends on arguments w.cget(...) depends on arguments w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.coords(...) tuple of ints w.destroy(...) none w.get(...) float w.identify(...) string or none w.menu(...) new menu rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.set(...) none w.toplevel(...) new toplevel rivetobj scrollbar methods Usage: Returns: w.activate(...) none w.bind(...) depends on arguments w.cget(...) depends on arguments w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.delta(...) float w.destroy(...) none w.fraction(...) float w.get(...) tuple of float w.identify(...) string or none w.menu(...) new menu rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.set(...) none w.toplevel(...) new toplevel rivetobj Note that the scrollbar set method supports only the tk version 4 style programming interface. This method takes two float arguments both between 0 and 1, describing the beginning and ending ranges. text methods Usage: Returns: w.bbox(...) tuple of ints w.bind(...) depends on arguments w.button(...) new button rivetobj w.canvas(...) new canvas rivetobj w.cget(...) depends on arguments w.checkbutton(...) new checkbutton rivetobj w.children(...) tuple of rivetobjs w.compare(...) int w.configure(...) depends on arguments w.debug(...) string w.delete(...) none w.destroy(...) none w.dlineinfo(...) tuple of integers w.entry(...) new entry rivetobj w.frame(...) new frame rivetobj w.get(...) string w.index(...) string w.insert(...) none w.label(...) new label rivetobj w.listbox(...) new listbox rivetobj w.mark_gravity(...) string w.mark_names(...) string w.mark_set(...) none w.mark_unset(...) none w.menu(...) new menu rivetobj w.menubutton(...) new menubutton rivetobj w.message(...) new message rivetobj w.name() a string, widget's resource id w.pack(...) none w.parent(...) rivetobj w.place(...) none w.radiobutton(...) new radiobutton rivetobj w.scale(...) new scale rivetobj w.scan_dragto(...) none w.scan_mark(...) none w.scrollbar(...) new scrollbar rivetobj w.search(...) string w.see(...) none w.tag_add(...) none w.tag_bind(...) depends on arguments w.tag_cget(...) depends on arguments w.tag_configure(...) depends on arguments w.tag_delete(...) none w.tag_lower(...) none w.tag_names(...) tuple of strings w.tag_nextrange(...) tuple of strings w.tag_raise(...) none w.tag_ranges(...) tuple of strings w.tag_remove(...) none w.text(...) new text rivetobj w.toplevel(...) new toplevel rivetobj w.window_cget(...) depends on arguments w.window_configure(...) depends on arguments w.window_create(...) none w.window_names(...) tuple of rivetobjs w.xview(...) tuple of two floats or () w.yview(...) tuple of two floats or () toplevel methods Usage: Returns: w.bind(...) depends on arguments w.button(...) new button rivetobj w.canvas(...) new canvas rivetobj w.cget(...) depends on arguments w.checkbutton(...) new checkbutton rivetobj w.children(...) tuple of rivetobjs w.configure(...) depends on arguments w.destroy(...) none w.entry(...) new entry rivetobj w.frame(...) new frame rivetobj w.label(...) new label rivetobj w.listbox(...) new listbox rivetobj w.menu(...) new menu rivetobj w.menubutton(...) new menubutton rivetobj w.message(...) new message rivetobj w.name() a string, widget's resource id w.parent(...) rivetobj w.radiobutton(...) new radiobutton rivetobj w.scale(...) new scale rivetobj w.scrollbar(...) new scrollbar rivetobj w.text(...) new text rivetobj w.toplevel(...) new toplevel rivetobjMiscellaneous
Utility functions The file rivetutil.py contains these routines: associate_scrollbar(client, scrollbar) This is a convenience function to configure a client (usually a canvas, entry, listbox, or text) and a scrollbar so that they operate together. option_menu(parent, variable, ...) This is the equivalent to Tk's tk_optionMenu routine. The second parameter should an instance of rivetutil.stringvar or one of its subclasses, it may be None, in which case a variable will be automatically generated for you. The remaining parameters are strings that should be used to label the menu entries. This function returns a menubutton widget that must be packed. rivetutil.py also contains the definitions for stringvar, intvar, and floatvar classes. An example of using these can be found in varexample.py. Threads Rivet is thread aware, but not thread safe. Rivet relinquishes control of python's global lock before it is about to block, allowing other python threads to run. Calling Rivet functions from multiple thread is unwise. If you did not enable threads when compiling Python, this should not be of concern to you.