EasyGui Tutorial

EasyGui home      Documentation (pydoc)      Documentation (epydoc)

Table of Contents

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

1 A warning about using EasyGui with IDLE

You may encounter problems using IDLE to run programs that use easygui. Try it and find out. easygui is a collection of Tkinter routines that run their own event loops. IDLE is also a Tkinter application, with its own event loop. The two may conflict, with the unpredictable results. If you find that you have problems, try running your program outside of IDLE.

2 Introduction

In easygui, all GUI interactions are invoked by simple function calls.

Here is a simple demo program using easygui. The screens that it produces are shown on the easygui home page.

from easygui import *
import sys

while 1:
	msgbox("Hello, world!")

	msg ="What is your favorite flavor?"
	title = "Ice Cream Survey"
	choices = ["Vanilla", "Chocolate", "Strawberry", "Rocky Road"]
	choice = choicebox(msg, title, choices)

	# note that we convert choice to string, in case
	# the user cancelled the choice, and we got None.
	msgbox("You chose: " + str(choice), "Survey Result")

	msg = "Do you want to continue?"
	title = "Please Confirm"
	if ccbox(msg, title):     # show a Continue/Cancel dialog
		pass  # user chose Continue
	else:
		sys.exit(0)           # user chose Cancel

3 EasyGui's demonstration routine

To run EasyGui's demonstration routine, invoke easygui from the command line this way:

	python easygui.py

or from an IDE (such as IDLE, PythonWin, Wing, etc.) this way:

	import easygui as g
	g._test()

This will allow you to try out the various easygui functions, and will print the results of your choices to the console.

4 Importing easygui

In order to use easygui, you must import it. The simplest import statment is:

    import easygui

If you use this form, then to access the easygui functions, you must prefix them with the name "easygui", this way:

	easygui.msgbox(...)

One alternative is to import easygui this way:

	from easygui import *

This makes it easier to invoke the easygui functions; you won't have to prefix the function names with "easygui". You can just code something like this:

	msgbox(...)

A third alternative is to use something like the following import statement:

     import easygui as g

This allows you to keep the easygui namespace separate with a minimal amount of typing. You can access easgui functions like this:

	g.msgbox(...)

5 Using easygui

Once your module has imported easygui, GUI operations are a simple a matter of invoking easygui functions with a few parameters. For example, using easygui, the famous "Hello, world!" program looks like this:

	from easygui import *
	msgbox("Hello, world!")

To see a demo of what easygui output looks like, invoke easygui from the command line,this way:

	python easygui.py

To see examples of code that invokes the easygui functions, look at the demonstration code at the end of easygui.py.

6 Default arguments for easygui functions

For all of the boxes, the first two arguments are for message and title, in that order. In some cases, this might not be the most user-friendly arrangment (for example, the dialogs for getting directory and filenames ignore the message argument), but I felt that keeping this consistent across all widgets was a consideration that is more important.

Most arguments to easygui functions have defaults. Almost all of the boxes display a message and a title. The title defaults to the empty string, and the message usually has a simple default.

This makes it is possible to specify as few arguments as you need in order to get the result that you want. For instance, the title argument to msgbox is optional, so you can call msgbox specifying only a message, this way:

	msgbox("Danger, Will Robinson!")

or specifying a message and a title, this way:

	msgbox("Danger, Will Robinson!", "Warning!")

On the various types of buttonbox, the default message is "Shall I continue?", so you can (if you wish) invoke them without arguments at all. Here we invoke ccbox (the close/cancel box, which returns a boolean value) without any arguments at all.

	if ccbox(): pass  # user chose to continue
	else: return      # user chose to cancel

7 Using keyword arguments when calling easygui functions

It is possible to use keyword arguments when calling easygui functions. (Prior to version 0.80, only the use of positional arguments was documented. In version 0.80, parameter names were modified to be more consistent, and the use of keyword arguments was documented.)

Suppose for instance that you wanted to use a buttonbox, but (for whatever reason) did not want to specify the title (second) positional argument. You could still specify the choices argument (the third argument) using a keyword, this way:

choices = ["Yes","No","Only on Friday"]
reply = choicebox("Do you like to eat fish?", choices=choices)

8 Button boxes — pre-defined

There are a number of functions built on top of buttonbox() for common needs.

8.1 msgbox

msgbox displays a message and offers an OK button. You can send whatever message you want, along with whatever title you want. You can even over-ride the default text of "OK" on the button if you wish. Here is the signature of the msgbox function:

def msgbox(msg="(Your message goes here)", title="", ok_button="OK"):
    ....

The clearest way to over-ride the button text is to do it with a keyword argument, like this:
msgbox("Backup complete!", ok_button="Good job!")

8.2 ccbox

ccbox offers a choice of Continue and Cancel, and returns either 1 (for continue) or 0 (for cancel).

8.3 ynbox

ynbox offers a choice of Yes and No, and returns either 1 (for yes)or 0 (for no).

NOTE that these boxes return integer values (1 and 0), not true boolean values (true and false), which became available in Python version 2.3.

	msgbox("Hello, world!")
	msg = "Do you want to continue?"
	title = "Please Confirm"
	if ccbox(msg, title):     # show a Continue/Cancel dialog
		pass  # user chose Continue
	else:  # user chose Cancel
		sys.exit(0)          

9 Button boxes — user-defined

To specify your own set of buttons in a buttonbox, use the buttonbox() function.

The buttonbox can be used to display a set of buttons of your choice. When the user clicks on a button, buttonbox() returns the text of the choice. If the user cancels or closes the buttonbox, the default choice (the first choice) is returned.

9.1 buttonbox

buttonbox displays a message, a title, and a set of buttons. Returns the text of the button that the user selected.

9.2 indexbox

indexbox displays a message, a title, and a set of buttons. Returns the index of the user's choice. For example, if you invoked index box with three choices (A, B, C), indexbox would return 0 if the user picked A, 1 if he picked B, and 2 if he picked C.

9.3 boolbox

boolbox (boolean box) displays a message, a title, and a set of buttons. Returns returns 1 if the first button is chosen. Otherwise returns 0.

Here is a simple example of a boolbox():

	message = "What does she say?"
	title = ""
	if boolbox(message, title, ["She loves me", "She loves me not"]):
		sendher("Flowers")
	else: pass

9.4 buttonbox — showing images

When you invoke the buttonbox function (or other functions that display a button box, such as msgbox, indexbox, ynbox, etc.), you can specify the keyword argument image=xxx where xxx is the filename of a .gif image. Note that .gif is the only format currently supported.

If an image argument is specified, the image file will be displayed after the message.

Here is some sample code from EasyGui's demonstration routine.

image = "python_and_check_logo.gif"
msg   = "Do you like this picture?"
choices = ["Yes","No","No opinion"]
reply=buttonbox(msg,image=image,choices=choices)

10 Selecting from a list of items

10.1 choicebox

Buttonboxes are good for offering the user a small selection of short choices. But if there are many choices, or the text of the choices is long, then a better strategy is to present them as a list.

choicebox provides a way for a user to select from a list of choices. The choices are specified in a sequence (a tuple or a list). The choices will be given a case-insensitive sort before they are presented.

The keyboard can be used to select an element of the list.

Pressing "g" on the keyboard, for example, will jump the selection to the first element beginning with "g". Pressing "g" again, will jump the cursor to the next element beginning with "g". At the end of the elements beginning with "g", pressing "g" again will cause the selection to wrap around to the beginning of the list and jump to the first element beginning with "g".

If there is no element beginning with "g", then the last element that occurs before the position where "g" would occur is selected. If there is no element before "g", then the first element in the list is selected.

	msg ="What is your favorite flavor?"
	title = "Ice Cream Survey"
	choices = ["Vanilla", "Chocolate", "Strawberry", "Rocky Road"]
	choice = choicebox(msg, title, choices)


Click image to enlarge it.
# another exaple of a choicebox


Click image to enlarge it.

10.2 multchoicebox

The multchoicebox() function provides a way for a user to select from a list of choices. The interface looks just like the choicebox, but the user may select zero, one, or multiple choices.

The choices are specified in a sequence (a tuple or a list). The choices will be given a case-insensitive sort before they are presented.

# an example of a multchoicebox


Click image to enlarge it.

11 Entering information

11.1 enterbox

enterbox is a simple way of getting a string from the user

11.2 passwordbox

passwordbox is a simple way of getting a password from the user. As the user types in the password, it is masked.

11.3 integerbox

integerbox is a simple way of getting an integer from the user.

# an example of a passwordbox

11.4 multenterbox

multenterbox is a simple way of showing multiple enterboxes on a single screen.

11.5 multpasswordbox

multpasswordbox has the same interface as multenterbox, but when it is displayed, the last of the fields is assumed to be a password, and is masked with asterisks.

If there are fewer values than names, the list of values is padded with empty strings until the number of values is the same as the number of names.

If there are more values than names, the list of values is truncated so that there are as many values as names.

Returns a list of the values of the fields, or None if the user cancels the operation.

Here is some example code, that shows how values returned from multenterbox can be checked for validity before they are accepted.

		
		msg = "Enter your personal information"
		title = "Credit Card Application"
		fieldNames = ["Name","Street Address","City","State","ZipCode"]
		fieldValues = []  # we start with blanks for the values
		fieldValues = multenterbox(msg,title, fieldNames)

		# make sure that none of the fields was left blank
		while 1:
			if fieldValues == None: break
			errmsg = ""
			for i in range(len(fieldNames)):
				if fieldValues[i].strip() == "":
					errmsg = errmsg + ('"%s" is a required field.\n\n' % fieldNames[i])
			if errmsg == "": break # no problems found
			fieldValues = multenterbox(errmsg, title, fieldNames, fieldValues)

		print "Reply was:", fieldValues

Here is some example code, that shows how values returned from multpasswordbox can be checked for validity before they are accepted.


		msg = "Enter logon information"
		title = "Demo of multpasswordbox"
		fieldNames = ["Server ID", "User ID", "Password"]
		fieldValues = []  # we start with blanks for the values
		fieldValues = multpasswordbox(msg,title, fieldNames)

		# make sure that none of the fields was left blank
		while 1:
			if fieldValues == None: break
			errmsg = ""
			for i in range(len(fieldNames)):
				if fieldValues[i].strip() == "":
					errmsg = errmsg + ('"%s" is a required field.\n\n' % fieldNames[i])
			if errmsg == "": break # no problems found
			fieldValues = multpasswordbox(errmsg, title, fieldNames, fieldValues)

		print "Reply was:", fieldValues

12 Displaying text

easygui provides functions for displaying text.

12.1 textbox

The textbox() function displays text in a proportional font. The text will word-wrap.

12.2 codebox

The codebox() function displays text in a monospaced font and does not wrap.

Note that you can pass codebox() and textbox() either a string or a sequence. A sequence will be converted to text before being displayed. This means that you can use these functions to display the contents of a file this way:

filename = os.path.normpath("c:/autoexec.bat")
text = open(filename).read()
codebox("Contents of file " + filename, text=text)

13 Selecting directories and files

A common need is to ask the user for a filename or for a directory. easygui provides a few basic functions for allowing a user to navigate through the file system and choose a directory or a file. (These functions are wrappers around widgets and classes in lib-tk.)

Note that in the current version of easygui, the startpos argument is not supported.

13.1 diropenbox

diropenbox returns the name of a directory

13.2 fileopenbox

fileopenbox returns the name of a file

13.3 filesavebox

filesavebox returns the name of a file. It is presumed that this is a prelude for saving a file, so if you select a file that already exists, you get a warning message telling you that the file already exists.