Tutorial TKInter Python (GUI) Parte 7

RESUMEN INTERFAZ GRÁFICA
VII PARTE
5 Noviembre del 2010
 
Autor: Grupo 50, Segundo Semestre 2010 (Sede San Carlos)
 
30. wxPython, Otro módulo para interfaces gráficas con Python
 
Bueno, parece que han habido muchas cosas qué aprender sobre Tkinter.
 
Suponiendo que Tkinter tiene algún rival podría decirse que sería wxPython. Así que me pareció interesante conocer a este
 rival de Tkinter, y debo decir que me he llevado muy buenas sorpresas.
 
Aunque siento que se ha quedado corto el manual del Tkinter. Por ejemplo, nunca tocamos el tema de objeto.bind, todo lo
 hicimos con afters.. Y sin embargo, el objeto.bind es una de las cosas indispensables a la hora de usar Tkinter. Pero
 bueno, ya fue. Ya agregaré unos cuántos ejemplos más para Tkinter. Saltamos entonces al apartado 30 de este tutorial de
 interfaces. Para los que están muy dispuestos a sacarle el máximo provecho a este curso, no solo vamos a ver un módulo de
 interfaces gráficas, si no que vamos a entrar ahora con otro, el wxPython.
 
WxPython NO VIENE CON EL PYTHON, hay que bajárselo. Hay que instalarlo. Por eso preferí realizar la interfaz con Tkinter y
 toda la documentación posible. 
 
Y muchos se preguntarán ¿Para qué bajarse otro módulo si ya Python tiene el Tkinter? Bueno, pues, primero porque es
 interesante comparar ambos, y segundo, porque las ventajas que tiene wxPython sobre Tkinter, podrían ser interesantes y
 nos podrían ayudar talvez no ahora, pero en un futuro, cuando ya tengamos trabajo y necesitemos realizar este tipo de
 comparaciones.
 
Así que si quieres comenzar a trabajar y probar los ejemplos con este tutorial, ya seas usuario de alguna de las distros de
 Linux (como Ubuntu o Kubuntu), usuario de Windows, o usuario de otras cosas como Mac entre otras, lo primero que debes
 hacer es bajarte el wxPython e instalartelo. Para eso vaya a esta página:
http://wxpython.org/
 
¿Que vamos a aprender? Vamos a aprender que se puede programar una interfaz gráfica de dos maneras distintas, también,
 vamos a saber cómo se programa una interfaz con wxPython.
 
Una vez que encuentren la forma de instalarlo, entonces podemos comenzar.
 
31. Una ventana en wxPython
 
Cómo se abre una ventana en wxPython ejemplo sencillo:
 
from wx import *
 
v0 = PySimpleApp() # Elemento de aplicación
v1=Frame(None,title="BIENVENIDO A WXPYTHON") # Ventana padre
v1.Show() # Muestra la ventana
 
v0.MainLoop() # Ejecuta el programa
 
Es diferente con Tkinter en algunas cosas. Como por ejemplo:
 
- En vez de from import Tkinter * tenemos from wx import *
- En vez de v0=Tk() tenemos v0 = PySimpleApp()
- En lugar de tener v1 a v0 como elemento padre, colocamos none
- Un Frame en wxPython no es un panel si no una ventana
- El título se puede introducir entre las opciones del Frame
- Para mostrar una ventana basta con decir ventana.Show() y de hecho para ocultarla se utiliza ventana.Hide()
- El mainloop es igual al del Tkinter pero este se escribe MainLoop(), con mayúsculas (Debe ser en mayúsculas)
 
Sería bueno tener claro como poder hacer todas las cosas que hacemos en Tkinter, pero con wxPython, a la hora de trabajar con ventanas. Por ejemplo cómo hacemos para:
 
- Evitar que se redimencione la ventana
- Quitar bordes y botones de cerrar, minimizar, maximizar, barra de títulos, a la ventana
- Crear menúes en las ventanas
- Poner la ventana siempre visible
- ¿Y se verá igual en Ubuntu que en Windows?
 
32. Modificando las ventanas en wxPython
 
Vamos a ver un ejemplo de algunas propiedades que podemos darle a nuestar ventana. Para cambiar el tamaño se hace de la siguiente forma
 
from wx import *
 
v0 = PySimpleApp() # Elemento de aplicación
v1=Frame(None,title="BIENVENIDO A WXPYTHON",size=(640,480)) # Ventana padre
v1.CentreOnScreen() # Centra la ventana
 
v1.Show() # Muestra la ventana
 
v0.MainLoop() # Ejecuta el programa
 
Aquí vemos que con wxPython si que podemos centrar la ventana fácilmente, además usamos size para darle el tamaño que queremos.



Incluso podemos indicar que queremos que nuestro programa ocupe toda la pantalla (Modo Full Screen) de la siguiente forma:



from wx import *
 
v0 = PySimpleApp() # Elemento de aplicación
v1=Frame(None,title="BIENVENIDO A WXPYTHON") # Ventana padre
v1.CentreOnScreen() # Centra la ventana
v1.ShowFullScreen(1) # Hace que el programa ocupe toda la pantalla
v1.Show() # Muestra la ventana
 
v0.MainLoop() # Ejecuta el programa
 
Y para que no pueda cambiarse el tamaño
 
from wx import *
 
v0 = PySimpleApp() # Elemento de aplicación
v1=Frame(None,title="BIENVENIDO A WXPYTHON",size=(640,480)) # Ventana padre
 
v1.Show() # Muestra la ventana
 
b1=Button(v1,label="Aceptar",pos=(240, 420), size=(80, 25))
b2=Button(v1,label="Salir",pos=(330, 420), size=(80, 25))
v1.SetBackgroundColour("white") # Cambia el color de fondo
v1.SetSizeHints(640,480,640,480) # Minimo Ancho, Minimo Alto, Maximo Ancho, Maximo Alto
 
v1.CentreOnScreen() # Centra la ventana
 
v0.MainLoop() # Ejecuta el programa
 
Además le hemos cambiado el color de fondo. Se empieza a notar que algunas cosas son más sencillas y manejables desde wxPython que desde Tkinter. A estas alturas debería irnos quedando de la siguiente forma:
 
http://i.imgur.com/jqmLu.jpg 
 
33. Mostrando HTML directamente desde una ventana con wxPython
 
Dependiendo del conocimiento que tengamos sobre algunos lenguajes web, esta definitivamente va a sonarte como una opción interesantísima de Python. Con esta opción podemos mostrar imágenes online e incluso páginas web completas, en una ventana de Python. Por ejemplo, si quisiéramos mostar en la ventana que creamos arriba, una imágen que está en internet, una opción para realizarlo sería la siguiente:
 
from wx import *
 
v0 = PySimpleApp() # Elemento de aplicación
v1=Frame(None,title="BIENVENIDO A WXPYTHON",size=(640,480)) # Ventana padre
 
v1.Show() # Muestra la ventana
 
v1.SetBackgroundColour("white") # Cambia el color de fondo
v1.SetSizeHints(640,480,640,480) # Minimo Ancho, Minimo Alto, Maximo Ancho, Maximo Alto
v1.CentreOnScreen() # Centra la ventana
 
l1=StaticText(v1,label="EJEMPLO DE UN CONTROL TEXTO",pos=(240, 400))
l1.SetForegroundColour("blue")
 
b1=Button(v1,label="Aceptar",pos=(240, 420), size=(80, 25))
b2=Button(v1,label="Salir",pos=(330, 420), size=(80, 25))
 
SeccionHtml = html.HtmlWindow(v1,-1,size=(350,381),pos=(160, 1))
SeccionHtml.SetPage('''<img src="http://i.imgur.com/UbhPr.gif"/>''')
 
v0.MainLoop() # Ejecuta el programa



http://i.imgur.com/ftLeU.jpg 
 
La imágen es de un gato al que le brillan los ojos. Dicha imágen tiene una secuencia que se reproduce una y otra vez, lo que se conoce como una imágen de un GIF ANIMADO.



Otra forma de lograrlo sería la siguiente:
 
from wx import *
 
v0 = PySimpleApp() # Elemento de aplicación
v1=Frame(None,title="BIENVENIDO A WXPYTHON",size=(640,480)) # Ventana padre
 
v1.Show() # Muestra la ventana
 
v1.SetBackgroundColour("white") # Cambia el color de fondo
v1.SetSizeHints(640,480,640,480) # Minimo Ancho, Minimo Alto, Maximo Ancho, Maximo Alto
v1.CentreOnScreen() # Centra la ventana
 
l1=StaticText(v1,label="EJEMPLO DE UN CONTROL TEXTO",pos=(240, 400))
l1.SetForegroundColour("blue")
 
b1=Button(v1,label="Aceptar",pos=(240, 420), size=(80, 25))
b2=Button(v1,label="Salir",pos=(330, 420), size=(80, 25))
 
SeccionHtml = html.HtmlWindow(v1,-1,size=(350,381),pos=(160, 1))
SeccionHtml.LoadPage('http://i.imgur.com/UbhPr.gif')
 
v0.MainLoop() # Ejecuta el programa
 
Si lo que se quiere es abrir una página web entonces el código sería el siguiente:
 
from wx import *
 
v0 = PySimpleApp() # Elemento de aplicación
v1=Frame(None,title="BIENVENIDO A WXPYTHON",size=(640,480)) # Ventana padre
 
v1.Show() # Muestra la ventana
 
v1.SetBackgroundColour("white") # Cambia el color de fondo
v1.SetSizeHints(640,480,640,480) # Minimo Ancho, Minimo Alto, Maximo Ancho, Maximo Alto
v1.CentreOnScreen() # Centra la ventana
 
l1=StaticText(v1,label="EJEMPLO DE UN CONTROL TEXTO",pos=(240, 400))
l1.SetForegroundColour("blue")
 
b1=Button(v1,label="Aceptar",pos=(240, 420), size=(80, 25))
b2=Button(v1,label="Salir",pos=(330, 420), size=(80, 25))
 
SeccionHtml = html.HtmlWindow(v1,-1,size=(350,381),pos=(160, 1))
SeccionHtml.LoadPage('http://www.google.com/imghp?hl=es&tab=wi')
 
v0.MainLoop() # Ejecuta el programa
 
http://i.imgur.com/Qzoi8.jpg 
 
Sin embargo no tiene mucha utilidad desde mi punto de vista, ya que muchas páginas no se ven bien, debido a que utilizan JavaScript y Flash, entre otros elementos. Creo que este control es espectacular por si se desean agregar imágenes animadas y otras cosas más. Así que si se tiene un poco de creatividad, se sabe HTML, y Python, se tiene asegurado algo bastante llamativo.
 
Además, podemos introducir el control HTML en una ventana, junto con otros controles como botones y labels, como se puede ver arriba.
 
34. Posicionando elementos en wxPython
 
Bueno, como vimos en el tutorial de Tkinter, se pueden utilizar varios métodos para ordenar los elementos tales como:
- Frames
- objeto.pack
- objeto.grid
 
En wxPython, podemos darle la posición que queramos a los elementos mediante las coordenadas (x,y), por lo que se puede colocar EXACTAMENTE DONDE SE QUIERE. Por una parte es un poco complicado saber las coordenadas donde queremos que esté un objeto, pero al poder acceder a dicha característica, se logra un acabado exacto. En muchos de los casos resulta mejor poder dar la posición a los elementos.
 
Esto no quiere decir que en wxPython no exista grid ni frames. Al contrario, sería muy engorroso ordenar elementos del tipo matriz, con coordenadas. Solo que al poder posicionar los elementos, resulta mucho más fácil ordenar algunos elementos sin tener que adaptarse estricamente a columnas y filas. Se es más libre de colocar los elementos donde se requiera.

No hay comentarios:

Publicar un comentario

gmendezm
Portada
Lista Principal