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 rivetobj
Miscellaneous
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.