lunes, 17 de agosto de 2015

Practica #2
Programación Paralela y Distribuida
Maricela Ocaña

Interfaz Gráfica de Usuario (GUI) con Python


GUI son las siglas de interfaz gráfica de usuario. Son herramientas para crear interfaces gráficas, esto es, componentes gráficos con los cuales el usuario interacciona con la aplicación.

A continuación se describirán algunas cosas básicas que debemos comprender para trabajar con ventanas  y para dar un salto desde la consola a la interfaz, pero antes que nada se describirá algunos de los toolkits para creación de interfaces gráficas de usuario (GUIs) con Python más populares: PyGTK , PyQt ,TkInter y wxPython.

PyGTK
El subyacente biblioteca GTK + biblioteca ofrece todo tipo de elementos visuales y utilidades para ello y, si es necesario, se puede desarrollar aplicaciones de funciones completas para el escritorio GNOME.
Aplicaciones PyGTK son verdaderamente multiplataforma y que son capaces de ejecutar, sin modificar, en Linux, Windows, MacOS X y otras plataformas.

Otras características distintivas de PyGTK son, además de su facilidad de uso y rápida de prototipos, su primer soporte de accesibilidad clase o la capacidad para hacer frente con el texto multilingüe o bidireccional compleja para aplicaciones totalmente localizadas.

PyQt
Binding de la biblioteca gráfica Qt para el lenguaje de programación Python. La biblioteca está desarrollada por la firma británica Riverbank Computing y está disponible para Windows, GNU/Linux y Mac OS X bajo diferentes licencias.

Es especialmente interesante para el desarrollo en KDE, dado que Qt es la librería utilizada para crear este entorno.

No obstante el interés en Qt no se limita a KDE, sino que es una biblioteca multiplataforma que, además, desde la versión 4, utiliza widgets nativos para las distintas plataformas (anteriormente Qt emulaba el aspecto de la plataforma en la que corría).

PyQt utiliza un modelo de licencias similar al de Qt, con una licencia dual GPL/PyQt Commercial. Si nuestro programa es compatible con la licencia GPL, es decir, si vamos a publicar el código fuente y permitir a los usuarios modificar nuestra aplicación, podremos usar PyQt sin más preocupaciones. En caso contrario tendremos que pagar para obtener una licencia comercial.

TkInter
TkInter (de TK Interface) es un módulo que nos permite construir interfaces gráficas de usuario multiplataforma en Python utilizando el conocido toolkit Tk. Python incluye este módulo por defecto, lo que hace que sea un tookit muy popular. TkInter, además, es robusto, maduro y muy sencillo de aprender y de utilizar, contando con una amplia documentación.

TkInter se distribuye bajo la PSFL (Python Software Foundation License) una licencia compatible con la GPL creada para la distribución de software relacionado con el proyecto Python. La PSFL carece de la naturaleza viral de la GPL, por lo que permite crear trabajos derivados sin que estos se conviertan necesariamente en software libre.

wxPython
wxPython es un wrapper open source para el toolkit anteriormente conocido como wxWindows: wxWidgets. wxPython es posiblemente el toolkit para desarrollo de interfaces gráficas en Python más popular, superando incluso a TKinter, que, como comentamos, se incluye por defecto con el intérprete de Python. wxPython cuenta con más y mejores widgets que TKinter, y ofrece un muy buen aspecto en todas las plataformas, utilizando MFC en Windows y GTK en Linux.

wxPython cuenta además con herramientas muy interesantes como wxGlade, una aplicación RAD para diseñar las interfaces gráficas de forma visual.

Sin embargo, la API adolece de una cierta falta de consistencia y un estilo muy alejado de Python y más cercano a C++, ya que, de hecho, uno de sus objetivos es no distanciarse demasiado del estilo de wxWidgets. Esto ha provocado que hayan aparecido distintos proyectos para abstraer al programador de los entresijos del toolkit, como Dabo o Wax, aunque estos han tenido un éxito muy comedido.

Para nuestro ejemplo usaremos TkInter.

Tkinter ofrece varios controles, como botones, etiquetas y cuadros de texto utilizados en una aplicación GUI. Estos controles son comúnmente llamados widgets. Para este ejemplo se hara uso de tres widgets.

Paso 1: Importar el módulo en Python.

Paso 2: El módulo tkMessageBox se utiliza para mostrar cuadros de mensaje en sus aplicaciones. Este módulo proporciona una serie de funciones que se pueden utilizar para mostrar un mensaje adecuado.

Paso 3: Definimos una función con la instrucción def más un nombre de función descriptivo en este caso “suma”.
Paso 3.1: Declaramos variables “n1 y n2” de tipo float de donde se va a obtener el numero ingresado para la suma.
Paso 3.2: Suma contendrá el resultado de la sumatoria de n1 y n2.
Paso 3.3: Como se mencionó anteriormente en el Paso 2 tkMessageBox mostrara un cuadro con el mensaje “El resultado es: “.

Paso 4: Definimos una función con la instrucción def más un nombre de función descriptivo en este caso “Resta”.
Paso 4.1: Declaramos variables “n1 y n2” de tipo float de donde se va a obtener el numero ingresado para la resta.
Paso 4.2: resta contendrá el resultado de la resta de n1 y n2.
Paso 4.3: tkMessageBox mostrara un cuadro con el mensaje “El resultado es: “.

Paso 5: Definimos una función con la instrucción def más un nombre de función descriptivo en este caso “Multiplicacion”.
Paso 5.1: Declaramos variables “n1 y n2” de tipo float de donde se va a obtener el numero ingresado para la multiplicación.
Paso 5.2: multiplicacion contendrá el resultado de la multiplicación de n1 y n2.
Paso 5.3: tkMessageBox mostrara un cuadro con el mensaje “El resultado es: “.

Paso 6: Definimos una función con la instrucción def más un nombre de función descriptivo en este caso “División”.
Paso 6.1: Declaramos variables “n1 y n2” de tipo float de donde se va a obtener el numero ingresado para la division.
Paso 6.2: division contendrá el resultado de la división de n1 y n2.
Paso 6.3: tkMessageBox mostrara un cuadro con el mensaje “El resultado es: “.

Paso 7: gui = Tk() es la ventana principal aunque tú le puedes dar otro nombre en lugar de gui y si queremos darle un color al fondo de la pantalla usamos gui.config(bg="green").

Paso 8: Se crean etiquetas

Paso 9: Se crean cajas de texto.

Paso 10: Creación de botones ejemplo boton1 = Button(gui, text = "Suma", command = Suma,width=15)
boton1.pack().

Paso 11: Para inicializar la ventana usamos gui.mainloop().       


from Tkinter import *                        #Paso 1
import tkMessageBox                        #Paso 2


#Metodo para calcular la suma
def Suma():                                          #Paso 3
   n1=float(caja1.get())                       #Paso 3.1
   n2=float(caja2.get())
   suma=n1+n2                                    # Paso 3.2
   tkMessageBox.showinfo("Mensaje","El resultado es: %.2f"%suma)                     # Paso 3.3
   caja1.delete(0,20)                          
   caja2.delete(0,20)

#Metodo para calcular la resta
def Resta():                                          #Paso 4
   n1=float(caja1.get())                       #Paso 4.1
   n2=float(caja2.get())
   resta=n1-n2                                      #Paso 4.2
   tkMessageBox.showinfo("Mensaje","El resultado es: %.2f"%resta)                     #Paso 4.3
   caja1.delete(0,20)
   caja2.delete(0,20)

#Metodo para calcular la multiplicacion
def Multiplicacion():                          #Paso 5
   n1=float(caja1.get())                       #Paso 5.1
   n2=float(caja2.get())
   multiplicacion=n1*n2                     #Paso 5.2
   tkMessageBox.showinfo("Mensaje","El resultado es: %.2f"%multiplicacion)     #Paso 5.3
   caja1.delete(0,20)
   caja2.delete(0,20)

#Metodo para calcular la división
def Division():                                      #Paso 6
   n1=float(caja1.get())                       #Paso 6.1
   n2=float(caja2.get())
   division=n1/n2                 #Paso 6.2
   tkMessageBox.showinfo("Mensaje","El resultado es: %.2f"%division)                 #Paso 6.3
   caja1.delete(0,20)
   caja2.delete(0,20)

#Creacion del GUI
gui = Tk()                                               #Paso 7
gui.config(bg="green") # Le da color al fondo
#Titulo del GUI
gui.title("Calculadora")
#Dimensiones (ancho,alto,posicion x,posicion y)
gui.geometry("400x250+400+200")

#Creacion de una etiqueta               #Paso 8
var1 = StringVar()
var1.set("Escribe el primer número:")
label1 = Label(gui,textvariable=var1,height = 2)
label1.pack()

#Creación de una caja de texto para el primer numero
numero1=StringVar()                         #Paso 9
caja1=Entry(gui,bd=4,textvariable=numero1)
caja1.pack()

#Creacion de otra etiqueta              #Paso 8
var2 = StringVar()                              
var2.set("Escribe el segundo numero:")
label2 = Label(gui,textvariable=var2,height = 2)
label2.pack()

#Creacion de otra caja de texto para el segundo numero        #Paso 9
numero2=StringVar()
caja2=Entry(gui,bd=4,textvariable=numero2)
caja2.pack()

#Botón para la suma                          #Paso 10
boton1 = Button(gui, text = "Suma", command = Suma,width=15)
boton1.pack()

#Botón para la resta                           #Paso 10
boton2 = Button(gui, text = "Resta", command = Resta,width=15)
boton2.pack()

#Botón para multiplicación               #Paso 10
boton3 = Button(gui, text = "Multiplicacion", command = Multiplicacion,width=15)
boton3.pack()

#Boton para la division                      #Paso 10
boton4 = Button(gui, text = "Division", command = Division,width=15)
boton4.pack()

#Inicializa el GUI
gui.mainloop()                                     #Paso 11

Y así finalizamos con el ejemplo.

Las entradas son 15, 86 y como salidas tenemos 101.





Para más información visitar Python_gui_programming y el Blog Curiosidades de la Tecnología.

No hay comentarios:

Publicar un comentario