Provided by: python3-easygui_0.98.1-1_all bug

NAME

       easygui - easygui Documentation

       EasyGUI is a module for very simple, very easy GUI programming in Python. EasyGUI is different from other
       GUI generators in that EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked  by  simple
       function calls.

       EasyGui  provides  an  easy-to-use interface for simple GUI interaction with a user.  It does not require
       the programmer to know anything about tkinter, frames, widgets, callbacks or lambda.

       EasyGUI runs on Python 2 and 3, and does not have any dependencies.

EXAMPLE USAGE

       >>> import easygui
       >>> easygui.ynbox('Shall I continue?', 'Title', ('Yes', 'No'))
       True
       >>> easygui.msgbox('This is a basic message box.', 'Title Goes Here')
       'OK'
       >>> easygui.buttonbox('Click on your favorite flavor.', 'Favorite Flavor', ('Chocolate', 'Vanilla', 'Strawberry'))
       'Chocolate'

HOW TO GET EASYGUI

       The best method to get easygui on your system is to type:

          pip install --upgrade easygui

       , which will install the latest easygui.  You may also download the file  yourself  by  looking  for  the
       latest release in sourceforge:

       sourceforge download

TABLE OF CONTENTS

   EasyGui Support and Contacts
   Getting easygui and getting help
       The easygui project is developed on Github: https://github.com/robertlugg/easygui

       Releases are typically put in both sourceforge and pypi: http://sourceforge.net/projects/easygui

       You can use either place to download the latest version, submit bugs, and make requests for improvements.

       We welcome any and all feedback!

   Help develop easygui
       If you want to delve into the inner workings of easygui, wish to preview the next release, or if you want
       to contribute to develop easygui, feel free to explore our GitHub site

       You very welcome to fork and please let us know when you come up with cool stuff others might use!

   Thanks
       The following people (as well as many others) have contributed to easygui.  Thank you for your work!
          Alex Zawadzki - Project Management, Design, Testing

          Horst JENS - Design, Documentation, Testing

          Juan Jose Corrales - Development (Active)

          Robert Lugg - Development (Active)

          Stephen Ferg - (retired) Created and developed easygui through 0.96

          Andreas Noteng - Debian Package Manager

   easygui API
       easygui.buttonbox(msg='',  title='  ',  choices=('Button[1]',  'Button[2]',   'Button[3]'),   image=None,
       images=None, default_choice=None, cancel_choice=None, callback=None, run=True)
              Display a msg, a title, an image, and a set of buttons.  The buttons are defined by the members of
              the choices global_state.

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • choices (list) -- a list or tuple of the choices to be displayed

                     • image (str) -- (Only here for backward compatibility)

                     • images (str) -- Filename of image or iterable or iteratable of iterable to display

                     • default_choice (str) -- The choice you want highlighted when the gui appears

              Returns
                     the text of the button that the user selected

       easygui.diropenbox(msg=None, title=None, default=None)
              A dialog to get a directory name.  Note that the msg argument, if specified, is ignored.

              Returns the name of a directory, or None if user chose to cancel.

              If the "default" argument specifies a directory name, and that directory exists, then  the  dialog
              box will start with that directory.

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • default (str) -- starting directory when dialog opens

              Returns
                     Normalized path selected by user

       easygui.fileopenbox(msg=None, title=None, default='*', filetypes=None, multiple=False)
              A dialog to get a file name.

              About the "default" argument

              The  "default"  argument  specifies  a  filepath  that  (normally) contains one or more wildcards.
              fileopenbox will display only files that match the default filepath.  If omitted, defaults to  "*"
              (all files in the current directory).

              WINDOWS EXAMPLE:

                 ...default="c:/myjunk/*.py"

              will open in directory c:myjunkand show all Python files.

              WINDOWS EXAMPLE:

                 ...default="c:/myjunk/test*.py"

              will open in directory c:myjunkand show all Python files whose names begin with "test".

              Note  that  on  Windows,  fileopenbox automatically changes the path separator to the Windows path
              separator (backslash).

              About the "filetypes" argument

              If specified, it should contain a list of items, where each item is either:

              • a string containing a filemask          # e.g. "*.txt"

              • a list of strings, where all of the strings except the last one are  filemasks  (each  beginning
                with  "*.", such as "*.txt" for text files, "*.py" for Python files, etc.).  and the last string
                contains a filetype description

              EXAMPLE:

                 filetypes = ["*.css", ["*.htm", "*.html", "HTML files"]  ]

              NOTE:
                 If the filetypes list does not contain ("All files","*"), it will be added.

              If the filetypes list does not contain a filemask that includes the  extension  of  the  "default"
              argument,  it  will  be  added.   For  example, if default="*abc.py" and no filetypes argument was
              specified, then "*.py" will automatically be added to the filetypes argument.

              Parametersmsg (str) -- the msg to be displayed.

                     • title (str) -- the window title

                     • default (str) -- filepath with wildcards

                     • filetypes (object) -- filemasks that a user can choose, e.g. "*.txt"

                     • multiple (bool) -- If true, more than one file can be selected

              Returns
                     the name of a file, or None if user chose to cancel

       easygui.filesavebox(msg=None, title=None, default='', filetypes=None)
              A file to get the name of a file to save.  Returns the name of a file, or None if  user  chose  to
              cancel.

              The  "default" argument should contain a filename (i.e. the current name of the file to be saved).
              It may also be empty, or contain a filemask that includes wildcards.

              The "filetypes" argument works like the "filetypes" argument to fileopenbox.

              Parametersmsg (str) -- the msg to be displayed.

                     • title (str) -- the window title

                     • default (str) -- default filename to return

                     • filetypes (object) -- filemasks that a user can choose, e.g. " *.txt"

              Returns
                     the name of a file, or None if user chose to cancel

       easygui.textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True)
              Display a message and a text to edit

              msg    string text displayed in the message area (instructions...)

              title  str the window title

              text: str, list or tuple
                     text displayed in textAreas (editable)

              codebox: bool
                     if True, don't wrap and width is set to 80 chars

              callback: function
                     if set, this function will be called when OK is pressed

              run: bool
                     if True, a box object will be created and returned, but not run

              None   If cancel is pressed

              str    If OK is pressed returns the contents of textArea

       easygui.ynbox(msg='Shall  I  continue?',  title='  ',  choices=('[<F1>]Yes',   '[<F2>]No'),   image=None,
       default_choice='[<F1>]Yes', cancel_choice='[<F2>]No')
              Display a msgbox with choices of Yes and No.

              The returned value is calculated this way:

                 if the first choice ("Yes") is chosen, or if the dialog is cancelled:
                     return True
                 else:
                     return False

              If  invoked  without  a  msg argument, displays a generic request for a confirmation that the user
              wishes to continue.  So it can be used this way:

                 if ynbox():
                     pass # continue
                 else:
                     sys.exit(0)  # exit the program

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • choices (list) -- a list or tuple of the choices to be displayed

                     • image (str) -- Filename of image to display

                     • default_choice (str) -- The choice you want highlighted when the gui appears

                     • cancel_choice (str) -- If the user presses the 'X' close, which button should be pressed

              Returns
                     True if 'Yes' or dialog is cancelled, False if 'No'

       easygui.ccbox(msg='Shall  I  continue?',  title='  ',  choices=('C[o]ntinue',  'C[a]ncel'),   image=None,
       default_choice='Continue', cancel_choice='Cancel')
              Display a msgbox with choices of Continue and Cancel.

              The returned value is calculated this way:

                 if the first choice ("Continue") is chosen,
                   or if the dialog is cancelled:
                     return True
                 else:
                     return False

              If  invoked  without  a  msg argument, displays a generic request for a confirmation that the user
              wishes to continue.  So it can be used this way:

                 if ccbox():
                     pass # continue
                 else:
                     sys.exit(0)  # exit the program

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • choices (list) -- a list or tuple of the choices to be displayed

                     • image (str) -- Filename of image to display

                     • default_choice (str) -- The choice you want highlighted when the gui appears

                     • cancel_choice (str) -- If the user presses the 'X' close, which button should be pressed

              Returns
                     True if 'Continue' or dialog is cancelled, False if 'Cancel'

       easygui.boolbox(msg='Shall   I   continue?',   title='   ',   choices=('[Y]es',   '[N]o'),    image=None,
       default_choice='Yes', cancel_choice='No')
              Display a boolean msgbox.

              The returned value is calculated this way:

                 if the first choice is chosen, or if the dialog is cancelled:
                     returns True
                 else:
                     returns False

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • choices (list) -- a list or tuple of the choices to be displayed

                     • image (str) -- Filename of image to display

                     • default_choice (str) -- The choice you want highlighted when the gui appears

                     • cancel_choice (str) -- If the user presses the 'X' close, which button should be pressed

              Returns
                     True if first button pressed or dialog is cancelled, False if second button is pressed

       easygui.indexbox(msg='Shall    I    continue?',    title='    ',   choices=('Yes',   'No'),   image=None,
       default_choice='Yes', cancel_choice='No')
              Display a buttonbox with the specified choices.

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • choices (list) -- a list or tuple of the choices to be displayed

                     • image (str) -- Filename of image to display

                     • default_choice (str) -- The choice you want highlighted when the gui appears

                     • cancel_choice (str) -- If the user presses the 'X' close, which button should be pressed

              Returns
                     the index of the choice selected, starting from 0

       easygui.msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)
              Display a message box

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • ok_button (str) -- text to show in the button

                     • image (str) -- Filename of image to display

                     • root (tk_widget) -- Top-level Tk widget

              Returns
                     the text of the ok_button

       easygui.integerbox(msg='', title=' ', default=None, lowerbound=0, upperbound=99, image=None, root=None)
              Show a box in which a user can enter an integer.

              In addition to arguments for msg and title, this function accepts integer arguments for "default",
              "lowerbound", and "upperbound".

              The default, lowerbound, or upperbound may be None.

              When  the  user  enters  some  text,  the text is checked to verify that it can be converted to an
              integer between the lowerbound and upperbound.

              If it can be, the integer (not the text) is returned.

              If it cannot, then an error msg is displayed, and the integerbox is redisplayed.

              If the user cancels the operation, None is returned.

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • default (int) -- The default value to return

                     • lowerbound (int) -- The lower-most value allowed

                     • upperbound (int) -- The upper-most value allowed

                     • image (str) -- Filename of image to display

                     • root (tk_widget) -- Top-level Tk widget

              Returns
                     the integer value entered by the user

       easygui.multenterbox(msg='Fill  in  values  for  the   fields.',   title='   ',   fields=[],   values=[],
       callback=None, run=True)
              Show screen with multiple data entry fields.

              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 is None: break
                     errmsg = ""
                     for i in range(len(fieldNames)):
                         if fieldValues[i].strip() == "":
                             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: %s" % str(fieldValues))

              Parametersmsg (str) -- the msg to be displayed.

                     • title (str) -- the window title

                     • fields (list) -- a list of fieldnames.

                     • values (list) -- a list of field values

              Returns
                     String

       easygui.enterbox(msg='Enter something.', title=' ', default='', strip=True, image=None, root=None)
              Show a box in which a user can enter some text.

              You may optionally specify some default text, which  will  appear  in  the  enterbox  when  it  is
              displayed.

              Example:

                 reply = enterbox(....)
                 if reply:
                     ...
                 else:
                     ...

              Parametersmsg (str) -- the msg to be displayed.

                     • title (str) -- the window title

                     • default (str) -- value returned if user does not change it

                     • strip  (bool) -- If True, the return value will have its whitespace stripped before being
                       returned

              Returns
                     the text that the user entered, or None if he cancels the operation.

       easygui.exceptionbox(msg=None, title=None)
              Display a box that gives information about an exception that has just been raised.

              The caller may optionally pass in a title for  the  window,  or  a  msg  to  accompany  the  error
              information.

              Note  that  you  do  not need to (and cannot) pass an exception object as an argument.  The latest
              exception will automatically be used.

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

              Returns
                     None

       easygui.choicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True)
              Present the user with a list of choices.  return the choice that he selects.

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • choices (list) -- a list or tuple of the choices to be displayed

                     • preselect -- Which item, if any are preselected when dialog appears

              Returns
                     List containing choice selected or None if cancelled

       easygui.codebox(msg='', title=' ', text='')
              Display some text in a monospaced font, with no line wrapping.   This  function  is  suitable  for
              displaying code and text that is formatted using spaces.

              The text parameter should be a string, or a list or tuple of lines to be displayed in the textbox.

              Parametersmsg (str) -- the msg to be displayed

                     • title (str) -- the window title

                     • text (str) -- what to display in the textbox

       easygui.passwordbox(msg='Enter your password.', title=' ', default='', image=None, root=None)
              Show  a  box  in  which  a  user  can enter a password.  The text is masked with asterisks, so the
              password is not displayed.

              Parametersmsg (str) -- the msg to be displayed.

                     • title (str) -- the window title

                     • default (str) -- value returned if user does not change it

              Returns
                     the text that the user entered, or None if he cancels the operation.

       easygui.multpasswordbox(msg='Fill  in  values  for  the  fields.',  title='  ',   fields=(),   values=(),
       callback=None, run=True)
              Same  interface as multenterbox.  But in multpassword box, the last of the fields is assumed to be
              a password, and is masked with asterisks.

              Parametersmsg (str) -- the msg to be displayed.

                     • title (str) -- the window title

                     • fields (list) -- a list of fieldnames.

                     • values (list) -- a list of field values

              Returns
                     String

              Example

              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 is 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: %s" % str(fieldValues))

       easygui.multchoicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True)
              Same as choicebox, but the user can select many items.

       class easygui.EgStore(filename)
              Bases: object

              A class to support persistent storage.

              You  can  use  EgStore  to  support  the  storage  and  retrieval  of user settings for an EasyGui
              application.

              First: define a class named Settings as a subclass of EgStore

                 class Settings(EgStore):
                     def __init__(self, filename):  # filename is required
                         # specify default values for variables that this application wants to remember
                         self.user_id = ''
                         self.target_server = ''
                         settings.restore()

              Second: create a persistent Settings object*

                 settings = Settings('app_settings.txt')
                 settings.user_id = 'obama_barak'
                 settings.targetServer = 'whitehouse1'
                 settings.store()

                 # run code that gets a new value for user_id, and persist the settings
                 settings.user_id = 'biden_joe'
                 settings.store()

              Example C: recover the Settings instance, change an attribute, and store it again.

                 settings = Settings('app_settings.txt')
                 settings.restore()
                 print settings
                 settings.user_id = 'vanrossum_g'
                 settings.store()

              kill() Delete this store's file if it exists.

              restore()

              store()
                     Save this store to a pickle file.  All directories in filename must already exist.

       easygui.abouteasygui()
              shows the easygui revision history

       easygui.egdemo()
              Run the EasyGui demo.

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

       Here is a simple demo program using easygui.

          from easygui import *
          import sys

          # A nice welcome message
          ret_val = msgbox("Hello, World!")
          if ret_val is None: # User closed msgbox
              sys.exit(0)

          msg ="What is your favorite flavor?\nOr Press <cancel> to exit."
          title = "Ice Cream Survey"
          choices = ["Vanilla", "Chocolate", "Strawberry", "Rocky Road"]
          while 1:
              choice = choicebox(msg, title, choices)
              if choice is None:
                  sys.exit(0)
              msgbox("You chose: {}".format(choice), "Survey Result")

   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:

          from easygui import *
          egdemo()

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

   Importing EasyGui
       In order to use EasyGui, you must import it. The simplest import statement 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(...)

       This third alterative is actually the best way to do it once you get used to python and easygui.

   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.

   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 arrangement (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

   Using keyword arguments when calling EasyGui functions
       It is possible to use keyword arguments when calling EasyGui functions.

       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)

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

   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!")

       Here are a couple of examples:

          msgbox("Hello, world!")
       [image]

          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)
       [image]

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

   ynbox
       ynbox offers a choice of Yes and No, and returns either True of False.

   buttonbox
       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.

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

   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.

   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") # This is just a sample function that you might write.
          else:
              pass

   How to show an image in a buttonbox
       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 an image.   The
              file can be .gif.

       Usually, you can use other image formats such as .png.

       NOTE:
          The  types  of  files supported depends on how you installed python.  If other formats don't work, you
          may need to install the PIL library.

       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)

       If you click on one of the buttons on the bottom, its value will be returned in 'reply'.   You  may  also
       click on the image.  In that case, the image filename is returned.  [image]

   Letting the user select from a list of choices
   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)
       [image]

       Another example of a choicebox: [image]

   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.  [image]

   Letting the user enter information
   enterbox
       enterbox is a simple way of getting a string from the user

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

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

       In the multenterbox:

          • 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:

          from __future__ import print_function
          msg = "Enter your personal information"
          title = "Credit Card Application"
          fieldNames = ["Name", "Street Address", "City", "State", "ZipCode"]
          fieldValues = multenterbox(msg, title, fieldNames)
          if fieldValues is None:
              sys.exit(0)
          # make sure that none of the fields were left blank
          while 1:
              errmsg = ""
              for i, name in enumerate(fieldNames):
                  if fieldValues[i].strip() == "":
                    errmsg += "{} is a required field.\n\n".format(name)
              if errmsg == "":
                  break # no problems found
              fieldValues = multenterbox(errmsg, title, fieldNames, fieldValues)
              if fieldValues is None:
                  break
          print("Reply was:{}".format(fieldValues))

       NOTE:
          The first line 'from __future__' is only necessary if you are using Python 2.*, and is only needed for
          this demo.

   Letting the user enter password information
   passwordbox
       A passwordbox box is like an enterbox, but used for entering passwords. The text is masked as it is typed
       in.

   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.  [image]

   Displaying text
       EasyGui provides functions for displaying text.

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

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

       Note  that  you  can pass codebox() and textbox() either a string or a list of strings. A list of strings
       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:

          import os
          filename = os.path.normcase("c:/autoexec.bat")
          f = open(filename, "r")
          text = f.readlines()
          f.close()
          codebox("Contents of file " + filename, "Show File Contents", text)

   Working with 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.

   diropenbox
       diropenbox returns the name of a directory

   fileopenbox
       fileopenbox returns the name of a file [image]

   filesavebox
       filesavebox returns the name of a file

   Remembering User Settings
   EgStore
       A common need is to ask the user for some setting, and then to "persist it", or store it on disk, so that
       the next time the user uses your application, you can remember his previous setting.

       In order to make the process of storing and restoring user settings,  EasyGui  provides  a  class  called
       EgStore.  In  order  to  remember  some  settings,  your  application  must define a class (let's call it
       Settings, although you can call it anything you want) that inherits from EgStore.

       Your application must also create an object of that class (let's call the object settings).

       The constructor (the __init__ method) of the Settings class can initialize all of  the  values  that  you
       wish to remember.

       Once  you  have done this, you can remember the settings simply by assigning values to instance variables
       in the settings object, and use the settings.store() method to persist the settings object to disk.

       Here is an example of code using the Settings class:

          from easygui import EgStore

          # -----------------------------------------------------------------------
          # define a class named Settings as a subclass of EgStore
          # -----------------------------------------------------------------------
          class Settings(EgStore):

              def __init__(self, filename):  # filename is required
                  # -------------------------------------------------
                  # Specify default/initial values for variables that
                  # this particular application wants to remember.
                  # -------------------------------------------------
                  self.userId = ""
                  self.targetServer = ""

                  # -------------------------------------------------
                  # For subclasses of EgStore, these must be
                  # the last two statements in  __init__
                  # -------------------------------------------------
                  self.filename = filename  # this is required
                  self.restore()

          # Create the settings object.
          # If the settingsFile exists, this will restore its values
          # from the settingsFile.
          # create "settings", a persistent Settings object
          # Note that the "filename" argument is required.
          # The directory for the persistent file must already exist.

          settingsFilename = "settings.txt"
          settings = Settings(settingsFilename)

          # Now use the settings object.
          # Initialize the "user" and "server" variables
          # In a real application, we'd probably have the user enter them via enterbox
          user    = "obama_barak"
          server  = "whitehouse1"

          # Save the variables as attributes of the "settings" object
          settings.userId = user
          settings.targetServer = server
          settings.store()    # persist the settings
          print("\nInitial settings")
          print settings

          # Run code that gets a new value for userId
          # then persist the settings with the new value
          user    = "biden_joe"
          settings.userId = user
          settings.store()
          print("\nSettings after modification")
          print settings

          # Delete setting variable
          del settings.userId
          print("\nSettings after deletion of userId")
          print settings

       Here is an example of code using a dedicated function to create the Settings class:

          from easygui import read_or_create_settings

          # Create the settings object.
          settings = read_or_create_settings('settings1.txt')

          # Save the variables as attributes of the "settings" object
          settings.userId = "obama_barak"
          settings.targetServer = "whitehouse1"
          settings.store()    # persist the settings
          print("\nInitial settings")
          print settings

          # Run code that gets a new value for userId
          # then persist the settings with the new value
          user    = "biden_joe"
          settings.userId = user
          settings.store()
          print("\nSettings after modification")
          print settings

          # Delete setting variable
          del settings.userId
          print("\nSettings after deletion of userId")
          print settings

   Trapping Exceptions
   exceptionbox
       Sometimes exceptions are  raised...  even  in  EasyGui  applications.  Depending  on  how  you  run  your
       application, the stack trace might be thrown away, or written to stdout while your application crashes.

       EasyGui  provides  a  better way of handling exceptions via exceptionbox. Exceptionbox displays the stack
       trace in a codebox and may allow you to continue processing.

       Exceptionbox is easy to use. Here is a code example:

          try:
              someFunction()  # this may raise an exception
          except:
              exceptionbox()
       [image]

   EasyGui FAQ
   An FAQ consisting of far too few questions. Help please :)
   General Questions
       1. What other gui libraries can I use?

          There are several.  The two most popular as of 2014-12 are TkInter and PyQt.

          TkInter is a library shipped with Python and it is the de-facto standard for  Python.   You  can  find
          more about it at https://wiki.python.org/moin/TkInter

          PyQt is a very popular library.  More information on it is at https://wiki.python.org/moin/PyQt

          A      library      inspired      by      easygui      is      the      EasyGUI_qt      project     at
          http://easygui-qt.readthedocs.org/en/latest/ "Under the hood" easygui uses  Tkinter  while  EasyGUI_qt
          uses pyQt

       2. Why should I use easygui instead of some other library?

          Well,  sometimes  you  should start with those other (excellent) libraries.  However, we hope that you
          find easygui useful.  Some of the cases for using easygui are:

          • You are starting to program and are tired of the command line >>>.  easygui allows  you  to  quickly
            create GUIs without worrying about all the details of Tk or Qt.

          • You already have a program and want to make it easier for people to use by building a GUI for it.

          • Its easy!  You can try it out in a couple of hours and decide for yourself

          Don't  worry.   With easygui you are learning the basics.  We take only a few shortcuts to make things
          easier.  If you decide to move to a library with more functionality, you will already understand  some
          of the GUI basics.

   Specifics
       1. Can I specify a custom sort order for the items in a choicebox?

          No, there is no way to specify a custom order. The reason is that the data must be sorted in order for
          the "jump to" feature (namely, to jump down in the list by pressing keyboard keys) to work.

          For some tips on how to control the order of items in a choicebox, see this recipe  from  the  Easygui
          Cookbook.

       2. Button box images don't appear and I get an error such as:
             Cannot load C:UsersRobertSkyDriveGitHubeasyguieasyguipython_and_check_logo.jpg.  Check to make sure
             it is an image file.  PIL library isn't installed.  If it isn't installed, only .gif files  can  be
             used.

          Possibly  you  are  trying  to  load  files other than .gif.  Unfortunately, the 'PIL' library must be
          installed for this to work.

   Cookbook
   A section to hold code snippets and recipes
       1. Simple demo program

          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

       2. Controlling the order of items in choicebox

          In a choicebox, the choices must be in sort order so that the keyboard "jump to" feature (jump down in
          the list by pressing keyboard keys) will work.  But it often happens that a sort of first-cut  listing
          of choices doesn't sort in a user-friendly order. So what can you do to control the order of the items
          displayed in a choicebox?

          A useful technique is to specify keys for the items in the choicebox.  For example, suppose you want a
          choicebox to display View, Update, Delete, Exit.  If you specified your choices this way:

             choices = ["View", "Update", "Delete", "Exit"]

          you'd get this:

          • Delete

          • Exit

          • Update

          • View

          It  is definitely in alphabetic order, but not very user-friendly.  But if you specified keys for your
          choices this way:

             choices = ["V View", "U Update", "D elete", "X Exit"]

          you'd get this (with "X" appearing at the bottom):

          • D Delete

          • U Update

          • V View

          • X Exit

          Suppose you wanted to force View to the top, so it is the easiest choice to select.  You could  change
          its key from "V" to "A":

             choices = ["A View", "U Update", "D elete", "X Exit"]

          and you'd get this:

          • A View

          • D Delete

          • U Update

          • X Exit

          Another  technique  is to prepend a space to the choice.  Since space characters always sorts before a
          non-space character, you can use this trick to force something like "V  View" to the top of the list:

             choices = [" V View", "U Update", "D Delete", "X Exit"]

          produces this:

          • V View

          • D Delete

          • U Update

          • X Exit

          In the proportional font used by choicebox, the space before the "V" is almost imperceptible.

          Personally, I prefer to use alphabetic keys rather than numeric  keys  for  choicebox  items.   It  is
          easier to navigate the choices using alpha keys on the keyboard than by using the number keys.

          And it is possible to use multi-character keys, like this:

          • L1  Log old version

          • L2  Log new version

          Using keys for choices also makes it relatively easy to check for the user's selection:

             choices = [" V View", "U Update", "D elete", "X Exit"]
             choice = choicebox(msg,title,choices)

             if choice == None:
                 return
             reply = choice.split()[0] # reply = the first word of the choice

             if reply == "X":
                 return
             elif reply == "V":
                 processView()
             elif reply == "L1":
                 saveLog(version="old")
             elif reply == "L2":
                 saveLog(version="new")

       3. Registration System demo

          The  Registration  System  demo  application  is  a  simple database application to maintain a list of
          courses, and students who are registered for the courses.

          It is not completely implemented -- its purpose is to give you  a  feel  for  what  is  possible  with
          EasyGui and how you might do it, not to be a complete working application.

          File:  registration zip file

          Screenshots: [image] [image]

   EasyGui Links
       _

   YouTube videos by Marcus Adams
       A nice series of tutorials were created to show off Message Box, Button Box, Continue Box and Choice:

       Part 1 of many

   easygui for Students
       Austrian game-programming-for-children teacher Horst JENS  says:

       "I  can proudly report that EasyGui is very popular with my students of all ages and one of the best ways
       to introduce young students to python in a short time."

       Horst and his students have made several videos showing their use of EasyGui:

          • Lexi shows msgboxLeo shows buttonboxMira and Teresa show a simple graphic adventure game

   Previous Versions and website
       In December 2014, this website was converted to a new format.  A snapshot of the older website  is  still
       available, but is static as it won't be updated: easygui website up to version 0.96

   Stephen Ferg
       Stephen  developed  easygui up through version 0.96.  We are forever greatful for his insight and vision.
       He can be contacted at his website at: http://www.ferg.org/index.html

       You might also visit his blog where much of easygui is discussed at: https://easygui.wordpress.com

       Thank you Stephen.

       • genindex

       • search

       Background

       easygui was started several years ago by Stephen Ferg and was developed  and  supported  by  him  through
       2013.   From  there,  work was restarted circa 2014.  The first goal was to update the then four year old
       release and address some bugs and minor enhancements.  That first release was 0.97

       EasyGui version 0.98.0

       Copyright (c) -2016, Stephen Raymond Ferg

       All rights reserved.

       Redistribution and use in source and binary forms, with or without modification, are  permitted  provided
       that the following conditions are met:

          1. Redistributions  of source code must retain the above copyright notice, this list of conditions and
             the following disclaimer.

          2. Redistributions in binary form must reproduce the above copyright notice, this list  of  conditions
             and  the  following  disclaimer  in  the  documentation  and/or  other  materials provided with the
             distribution.

          3. The name of the author may not be used to endorse or promote products derived  from  this  software
             without specific prior written permission.

       THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
       LIMITED TO, THE  IMPLIED  WARRANTIES  OF  MERCHANTABILITY  AND  FITNESS  FOR  A  PARTICULAR  PURPOSE  ARE
       DISCLAIMED.  IN  NO  EVENT  SHALL  THE  AUTHOR  BE  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
       EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF  SUBSTITUTE  GOODS  OR
       SERVICES;  LOSS  OF  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
       LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  IN
       ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

ABOUT THE EASYGUI LICENSE

       This license is what is generally known as the "modified BSD license",
       aka "revised BSD", "new BSD", "3-clause BSD".
       See http://opensource.org/licenses/bsd-license.php

       This license is GPL-compatible.
       See http://en.wikipedia.org/wiki/License_compatibility
       See http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses

       The BSD License is less restrictive than GPL.
       It allows software released under the license to be incorporated into proprietary products.
       Works based on the software may be released under a proprietary license or as closed source software.
       http://en.wikipedia.org/wiki/BSD_licenses#3-clause_license_.28.22Revised_BSD_License.22.2C_.22New_BSD_License.22.2C_or_.22Modified_BSD_License.22.29

AUTHOR

       easygui dev team

COPYRIGHT

       2019, easygui dev team