jueves, 22 de mayo de 2014

Gestión de errores con EasyGUI

La función exceptionbox() del módulo EasyGUI muestra en una ventana el mensaje de la salida estándar de errores cuando una excepción es capturada. Para conocer con detalle cómo se tratan las excepciones en Python: ver capitulo Excepciones.




En la función exceptionbox() el argumento msg es el mensaje y title el título de la ventana. 


try:
    eg.msgbox("Al dividir 5/0 provocamos un error para capturarlo", 
              "Control: exceptionbox", ok_button="Seguir")
    division = 5 / 0
except:
    eg.exceptionbox("No es posible dividir por 0", "Error")


Ir al índice del tutorial de EasyGUI

miércoles, 21 de mayo de 2014

Listas de opciones con EasyGUI

El módulo EasyGUI incorpora las funciones choicebox() y multchoicebox() para presentar en una ventana una lista de opciones de la que se podrá elegir una, varias o ninguna opción, antes de continuar con la ejecución del programa. 


1) choicebox: lista de opciones

  
La función choicebox() sólo permite elegir una o ninguna opción. La función devolverá el literal de la opción elegida o None si no se eligió ninguna.

El argumento msg es el mensaje de la ventana, title es el título de la ventana y choices es la propia lista de las opciones. 

lista = ['Abrir...', 'Guardar', 'Imprimir...', 'Salir']
elemento = eg.choicebox(msg='Seleccionar una opción:',
                        title='Archivo',
                        choices=(lista))

if elemento != None:  
    eg.msgbox('Valor elegido: '+ elemento, 
              'Lista de opciones', 
              ok_button='Continuar')



2) multchoicebox: lista de opciones. Selección múltiple


La función multchoicebox() permite elegir una, varias o ninguna opción. La función devolverá una lista con las opciones elegidas o, bien, None si no se eligió ninguna.

El argumento msg es el mensaje de la ventana, title es el título de la ventana y choices es la propia lista de las opciones.

lista = ['Primera', 'Segunda', 'Tercera']
opcs = eg.multchoicebox(msg='Seleccionar',
                        title='Lista de opciones',
                        choices=lista)

if opcs != None:
    eg.msgbox('Lista: '+str(opcs), 
              'Opciones elegidas', 
              ok_button='Seguir')



Ir al índice del tutorial de EasyGUI

Entrada de contraseñas con EasyGUI

Como medida de seguridad es frecuente tener la necesidad de introducir contraseñas no visibles para iniciar aplicaciones o acceder a sistemas. EasyGUI proporciona dos funciones que podremos usar dependiendo del contexto que nos encontremos: passwordbox() y multpasswordbox()


1) passwordbox: entrada de contraseña 



La función passwordbox() muestra una ventana para introducir una contraseña que no será visible. El argumento msg es para el mensaje de la ventana, title es para el título de la ventana, default es para asignar una cadena inicial como contraseña y el argumento image es para indicar una ruta y el nombre de un archivo de imagen que será visualizado en la ventana.


paso = eg.passwordbox(msg='Contraseña:',
                      title='Acceso al sistema',                                                        
                      default='', image=imagen)


2) multipasswordbox: entrada múltiple con contraseña


La función multipasswordbox() es equivalente a la función multenterbox() del capítulo anterior porque permite introducir varios datos en la misma ventana. En este caso la diferencia está en que  el último dato a introducir deberá ser una contraseña (no será visible).

El argumento fields es una lista con los literales que identifican a cada campo y el argumento values es una tupla que podrá contener los valores iniciales de cada campo. 


sistemas = ['Equipo', 'Usuario', 'Contraseña']
pasos = []
pasos = eg.multpasswordbox(msg='Contraseñas:',
                           title='multpasswordbox',
                           fields=sistemas,
                           values=())
cad = ''
if pasos != None:
 for elemento in pasos:
  cad = cad + elemento + ' ' 
   
 eg.msgbox(cad, 'multpasswordbox', ok_button='Seguir')


Ir al índice del tutorial de EasyGUI

martes, 20 de mayo de 2014

Entrada de datos con EasyGUI

Después de ver en el capítulo anterior las funciones que se utilizan para mostrar ventanas de mensajes, continuamos con algunas de las funciones que permiten a los usuarios crear ventanas de diálogo para introducir datos en un programa: enterbox(), integerbox(), codebox(), textbox() y multenterbox().

1) enterbox: entrada de texto



La función enterbox() se utiliza para mostrar una ventana donde se permite introducir una cadena de texto.

El argumento strip si tiene el valor True suprime los espacios al principio y final de la cadena introducida, default contiene la cadena inicial y editable que será mostrada en la ventana, title es el título de la ventana, msg es el mensaje de la ventana e image sirve para indicar la ruta y el nombre de una imagen a mostrar.

texto = eg.enterbox(msg='Entrada de texto:',
                                title='Control: enterbox',
                                default='EasyGUI', strip=True,
                                image=None)


2) integerbox: entrada de número entero



La función integerbox() se usa para mostrar una ventana con una caja donde es posible introducir un número entero. El valor introducido no será aceptado hasta que sea un número entero. Si se han establecido los límites mínimo y máximo (con los argumentos lowebound y upperbound) el número deberá ajustarse a éstos.

num = eg.integerbox(msg='Entrada de número (0-99):',
                    title='Control: integerbox',
                    default='',
                    lowerbound=0,
                    upperbound=99,
                    image=None)


3) codebox y textbox: cajas de texto editable



Las funciones codebox() y textbox() se utilizan para mostrar una ventana con una caja de texto que le permite al usuario introducir o editar texto en varias líneas. También, estas cajas pueden emplearse para mostrar los elementos de una lista, una tupla o las líneas de un archivo con la posibilidad de editar la información. La diferencia entre codebox() y textbox() está en la fuente que se utiliza por defecto para mostrar el texto. Con codebox() la fuente es proporcional, que es más adecuada para editar el código fuente de los programas.

En la función codebox() el argumento msg es para el mensaje, title es para el título de la ventana y text es para establecer el texto inicial que será mostrado en la ventana. La función texbox() cuenta además con el argumento codebox que con el valor “1” fija la fuente en proporcional.

texto = ['En este espacio puede cargar una lista, una tupla\n',
         'las líneas de un archivo y... después editarlo']
  
texto1 = eg.codebox(msg='Entrada de fuente',
                    title='Control: codebox',
                    text=texto)
  
texto2 = eg.textbox(msg='Entrada de texto:',                                        
                    title='Control: textbox',
                    text='', codebox=0)

       
4) multenterbox: entrada múltiple



La función multenterbox() muestra una ventana que permite introducir al usuario los datos de varios campos.

El argumento fields es una lista con los literales que identifican a cada campo y el argumento values es una tupla que contiene los valores iniciales de cada campo y es opcional.
  
campos = ['Nombre', 'Correo', 'Tel']
datos = []
datos = eg.multenterbox(msg='Entrada múltiple',
                        title='Control: multenterbox',
                        fields=campos, values=())
cadena = ''
if datos != None:
    for cam, dat in zip(campos,datos):
        cadena = cadena + cam + ': ' + dat+ '\n'
   
eg.msgbox(cadena, 'multenterbox', ok_button='Seguir')

Ir al índice del tutorial de EasyGUI

martes, 13 de mayo de 2014

Mostrar cajas de mensajes con EasyGUI


Continuamos conociendo más detalles del módulo EasyGUI después de la breve introducción del capítulo anterior.

A continuación, recorreremos las funciones que proporciona el módulo para construir ventanas de diálogos que muestren mensajes informativos y/o que ofrezcan al usuario la posibilidad de interactuar con el programa, permitiéndole elegir una opción entre varias posibles.

Las funciones disponibles son: msgbox(), boolbox(), ynbox(), buttonbox(), ccbox() e indexbox(). Algunas son demasiado parecidas.

Para probar los ejemplos es necesario importar con anterioridad el módulo easygui. En nuestro caso le asignaremos el nombre de referencia eg para que tenga su espacio de nombre propio:

import easygui as eg

Cada vez que tengamos que referirnos a alguna función del modulo lo haremos así:

eg.nombredefunción()



1) msgbox: caja de mensaje simple


La función msgbox() es para mostrar en pantalla una ventana con un mensaje simple y un único botón que pulsaremos para continuar la ejecución del programa:


eg.msgbox(msg='Caja de mensaje simple',
          title='Control: msgbox', 
          ok_button='Continuar',
          image=python.gif)

El argumento msg es el mensaje, title el título de la ventana, ok_button es el literal que se mostrará en el botón y, finalmente, image es la ruta y el nombre de un archivo de imagen que será mostrado en la ventana. Si image es None no se mostrará ninguna imagen.

 

2) boolbox (caja booleana) | ynbox (caja Sí/No)


Las funciones boolbox() y ynbox() son para mostrar en pantalla una ventana con un mensaje en forma de pregunta y dos botones que representan un par de respuestas del tipo “Sí” y “No”, “Aceptar” y “Cancelar”, etc. El programa no continuará hasta que no se elija alguna de las dos opciones.

Con EasyGUI 0.96: Si se elige la opción “Sí” la función devolverá el valor 1 y para la opción “No” la función devolverá el valor 0.

A partir de EasyGUI 0.97.4: Si se elige la opción “Sí” la función devolverá el valor True y para la opción “No” la función devolverá el valor False.



respuesta = eg.boolbox(msg='Caja booleana',
                       title='Control: boolbox',
                       choices=('Si(1)', 'No(0)'),
                       image=python.gif)

... ...
                     
respuesta = eg.ynbox(msg='Caja Sí/No',
                     title='Control: ynbox',
                     choices=('Si(1)', 'No(0)'),
                     image=None)


El argumento msg es el mensaje, title es el título de la ventana, choices es para asignar una tupla con las opciones “Sí” y “No” y, finalmente, image es para indicar la ruta y el nombre de un archivo de imagen que será mostrado en la ventana.

A partir de EasyGUI 0.97.4: tiene el argumento default_choice que permite resaltar uno de los botones de la ventana de diálogo, de tal forma, que si se presiona la tecla return esta opción será la elegida.


3) buttonbox: caja de botones


 
La función buttonbox() es para mostrar en pantalla una ventana con un mensaje en forma de pregunta y varios botones que representan las opciones o respuestas posibles. El programa no continuará hasta que no se elija alguna opción y la función devolverá el literal o etiqueta del botón elegido.


respuesta = eg.buttonbox(msg='Caja con varios botones',
                         title='Control: buttonbox',
                         choices=('(Sí)', '(No)', '(A veces)'),
                         image=python.png)


El argumento msg es el mensaje, title es el título de la ventana, choices es para asignar una tupla con las opciones posibles y, finalmente, image es la ruta y el nombre de un archivo de imagen que será mostrado en la ventana.

A partir de EasyGUI 0.97.4: tiene el argumento default_choice que permite resaltar uno de los botones de la ventana de diálogo, de tal forma, que si se presiona la tecla return esta opción será la elegida.

4) ccbox: caja de mensaje con lista botones


 
La función ccbox() es similar a la anterior, buttonbox().

Con EasyGUI 0.96: Si se elige la opción “Aceptar” la función devolverá el valor 1 y para la opción “Cancelar” la función devolverá el valor 0.

A partir de EasyGUI 0.97.4: Si se elige la opción “Aceptar” la función devolverá el valor True y para la opción “Cancelar” la función devolverá el valor False.


elemento = eg.ccbox(msg='Lista de botones, Aceptar: defecto', 
                    title='Control: ccbox', 
                    choices=('Aceptar(1)', 'Cancelar(0)'),
                    image=python.png)

A partir de EasyGUI 0.97.4: tiene el argumento default_choice que permite resaltar uno de los botones de la ventana de diálogo, de tal forma, que si se presiona la tecla return esta opción será la elegida.


5) indexbox: caja de mensaje y botones con índice

 
La función indexbox() es para mostrar en pantalla una ventana con un mensaje en forma de pregunta y varios botones que representan las opciones o respuestas posibles. El programa no continuará hasta que no se elija alguna opción y la función devolverá un número que se corresponde con el índice asignado a cada botón, comenzando desde el número 0.


opcion = eg.indexbox(msg='Botones con índice',
                     title='Control: indexbox',
                     choices=('Sí(0)', 'No(1)', 'Saltar(2)'),
                     image=None)


A partir de EasyGUI 0.97.4: tiene el argumento default_choice que permite resaltar uno de los botones de la ventana de diálogo, de tal forma, que si se presiona la tecla return esta opción será la elegida.



Ir al índice del tutorial de EasyGUI

lunes, 12 de mayo de 2014

EasyGUI, la interfaz gráfica fácil

Introducción

EasyGUI es un módulo de interfaz gráfica para Python 2.x/3.x creado por Stephen Raymond Ferg basado en Tkinter, un binding de la biblioteca gráfica Tcl/Tk para Python. Tkinter es considerado un estándar para la interfaz gráfica de usuario para Python aunque en la actualidad las alternativas gráficas son numerosas. Para poder trabajar con EasyGUI es imprescindible que esté instalado Tkinter. En Windows no tendremos problemas porque se instala de forma predeterminada cuando se instala Python pero en Linux hay que instalar el paquete “python3-tk”:

$ sudo apt-get install python3-tk

EasyGUI es ideal para los programadores que se inician en Python y es, especialmente, útil para los administradores de sistemas porque permite incorporar a los scripts una interfaz gráfica muy fácil de programar que no requiere conocimientos de programación orientada a objetos, que serían necesarios para programar directamente con Tkinter. Actualmente, EasyGUI es mantenido por Alexander Zawadzki.


Instalar EasyGUI descargando archivo comprimido


Descargar el archivo comprimido del módulo, descomprimirlo en una carpeta y, después, proceder a su instalación:

Descargar EasyGUI última versión (last version)
Descargar EasyGUI versión: 0.96



Instalación en GNU/Linux:

$ sudo python setup.py install

Instalación en Windows:

> python setup.py install


Instalación última versión con instalador Pip


Instalación en GNU/Linux:

    $ sudo pip install easygui


    Instalación en Windows:

    > pip install easygui


    Importar el módulo EasyGUI


    Para importar el módulo en un programa Python 2.x/3.x con su propio espacio de nombres:

    import easygui as eg

    Ahora podremos acceder al entorno interactivo para importar el módulo como se indica en la línea anterior y para mostrar información del módulo EasyGUI y asegurarnos que está instalado correctamente, teclearemos:

    eg.abouteasygui()

    Debe aparecer la siguiente ventana:




    Algunas mejoras a partir de la versión 0.97.4:
    • Las funciones boolbox(), buttonbox(), ccbox(), indexbox() y ynbox() incorporan el nuevo argumento default_choice que permite resaltar uno de los botones de la ventana de diálogo, de tal forma, que si se presiona la tecla return esta opción será la elegida.
    • Las funciones boolbox(), ccbox(), ynbox() que se utilizan en ventanas de diálogos con dos posibles respuestas (aceptar/cancelar, si/no, etc.) devolverán los valores lógicos True y False en vez de los valores 1 y 0.
    • Es posible asignar (mapear) teclas a los botones de una ventana de diálogo. Si se escribe en un botón el título "[a]ceptar" la tecla "a" aparecerá subrayada y si se presiona dicha tecla será equivalente a presionar el botón. Si se escribe en un botón el título "[[a]]aceptar" tendrá el mismo efecto lo anterior pero el carácter "a" no se mostrará subrayado.
    • La función fileopenbox() permite seleccionar varios archivos. Para ello incorpora el argumento multiple que tendrá que establecerse como True.

    En los capítulos siguientes mostraremos ejemplos de uso de todos los objetos que podemos manejar fácilmente con EasyGUI desde nuestros programas: ventanas para salida de mensajes, cajas de entrada de datos, listas de selección, ventanas para abrir y guardar ficheros, etcétera.


    Ir al índice del tutorial de EasyGUI