Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1tutorial Tkinter Python
1tutorial Tkinter Python
1. Introduccin:
Este tutorial no est hecho para seguirlo al pie de la letra solo son
algunas cosas bsicas que debemos entender para poder
trabajar con ventanas y para dar un pequeo salto desde la cnsola a la
interfaz. Recordemos que somos la primera
generacin en el TEC que recibe Python, por lo que el tutorial es
meramente experimental, y puede contener cosas que no
son del todo correctas. Se tratar de mostrar cmo se trabaja desde
ciertos puntos de vista, y el usuario se encargar de
desarrollar su propia forma de construir la interfaz.
4. Importando el mdulo
Para importar un mdulo en Python escribimos
import nombredelmodulo
Otra forma de hacerlo es
from nombredelmodulo import *
Esto no les va a devolver nada porque el modulo nombredelmodulo no
existe. Pero bsicamente estas son las formas que se
usan ms.
5. Ventanas
Las ventanas se pueden configurar de diferentes formas. Veamos un ejemplo
de una ventana.
Ejemplo 1:
from Tkinter import * # Importa el mdulo
v0 = Tk() # Tk() Es la ventana principal
v0.mainloop() # Es el evento que llama al inicio de nuestro programa.
Siempre lo lleva la ventana principal.
Esto nos lanza una ventana normal.
Ejemplo 2:
Ahora para colocarle fondo a la ventana sera:
from Tkinter import * # Importa el mdulo
v0 = Tk() # Tk() Es la ventana principal
v0.config(bg="black") # Le da color al fondo
v0.mainloop() # Es el evento que llama al inicio de nuestro programa.
Siempre lo lleva la ventana principal.
Ejemplo 3:
Una forma de controlar el tamao de la ventana sera el siguiente:
from Tkinter import * # Importa el mdulo
v0 = Tk() # Tk() Es la ventana principal
v0.config(bg="black") # Le da color al fondo
v0.geometry("500x500") # Cambia el tamao de la ventana
v0.mainloop() # Es el evento que llama al inicio de nuestro programa.
Siempre lo lleva la ventana principal.
Ejemplo 4:
Bueno como habrn visto, declaramos una variable llamada v0, del tipo
Tk().
Adems de Tk(), podemos declarar ms variables
Toplevel: Crea una nueva ventana
Frame: Coloca los pneles para ordenar los elementos
Canvas: Para dibujar y graficar funciones etc..
Button: Para colocar un botn
Label: Coloca un texto
Message: Coloca un texto
Entry: Coloca una entrada de texto de una linea
Text: Coloca una entrada de texto de varias lineas
Listbox: Coloca una lista con elementos clickeables
Men: Coloca un men que puede contener cascadas y elementos clickeables
Existe toda una mecnica para agregar elementos a una ventana. Adems de
todo esto se pueden colocar imgenes y otras
cosas. Por el momento estos controles bsicos son los que aprenderemos a
utilizar:
Ejemplo 5:
Vamos a crear una ventana de tipo Toplevel. En Python ocurre algo
curioso, todas las ventanas creadas se abren al mismo
tiempo. Por eso cuando creamos una ventana del tipo Toplevel, debemos
ocultarla. Veamos un ejemplo:
from Tkinter import * # Importa el mdulo
v0 = Tk() # Tk() Es la ventana principal
v0.config(bg="black") # Le da color al fondo
v0.geometry("500x500") # Cambia el tamao de la ventana
v1=Toplevel(v0) # Crea una ventana hija
v0.mainloop() # Es el evento que llama al inicio de nuestro programa.
Siempre lo lleva la ventana principal.
6. Irregularidades
Una de las cosas que dificulta a una persona nueva que quiere
aprender interfaz en Python, es el conjunto de dificultades
que aparecen conforme vas aprendiendo, sobre todo si no dominas
bien ms de un lenguaje o solo haz programado en Scheme
una interfaz grfica y piensas que todas se programan igual.
Pues presenta una dificultad.
En el ltimo cdigo que vimos:
from Tkinter import * # Importa el mdulo
v0 = Tk() # Tk() Es la ventana principal
v1=Toplevel(v0) # Crea una ventana hija
def mostrar(ventana): ventana.deiconify() # Muestra una ventana
def ocultar(ventana):ventana.withdraw() # Oculta una ventana
def cambiar_stringvar(nuevotexto,stringvar):
stringvar.set(nuevotexto)
mitexto=StringVar()
textoentry=StringVar()
entry1=Entry(v0,textvar=textoentry).pack()
label1=Label(v0,textvar=mitexto).pack()
b1=Button(v0,text="Escribir",command=lambda:
cambiar_stringvar(textoentry.get(),mitexto)).pack()
v0.mainloop()
Ejemplo 15:
Ahora veamos el objeto Listbox. Supongamos que queremos
introducir una palabra en un control de tipo Listbox. Una forma
de
implementarlo seria:
from Tkinter import *
v0=Tk()
list1=Listbox(v0)
list1.pack()
mivalor=StringVar()
e1=Entry(v0,textvar=mivalor).pack()
def insertar_en_listbox():
if mivalor.get() != "":
list1.insert(END,mivalor.get())
else: print "Por favor esciba algn texto"
b1=Button(v0,text="Insertar en
Listbox",command=insertar_en_listbox).pack()
v0.mainloop()
b1=Button(v0,text="Insertar en
Listbox",command=insertar_en_listbox).pack()
v0.mainloop()
v0=Tk()
def colocar_scrollbar(listbox,scrollbar):
scrollbar.config(command=listbox.yview)
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.pack(side=RIGHT, fill=Y)
listbox.pack(side=LEFT, fill=Y)
frame1=Frame(v0)
frame1.pack()
scroll1=Scrollbar(frame1)
list1=Listbox(frame1)
list1.pack()
colocar_scrollbar(list1,scroll1)
def cargarlistbox(lista,listbox):
ind,largo=0,len(lista)
while ind < largo:
listbox.insert(END,lista[ind])
ind+=1
ListaNombres=['Laura','Roger','Fabiola']
cargarlistbox(ListaNombres,list1)
v0.mainloop()
Ejemplo 18:
Este es un ejemplo de cmo imprimir el texto del elemento
seleccionado en un Listbox, en un control del tipo Label. Esta
es
una de las formas con las que se puede implementar esto:
from Tkinter import *
v0=Tk()
def colocar_scrollbar(listbox,scrollbar):
scrollbar.config(command=listbox.yview)
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.pack(side=RIGHT, fill=Y)
listbox.pack(side=LEFT, fill=Y)
frame1=Frame(v0)
frame1.pack()
scroll1=Scrollbar(frame1)
list1=Listbox(frame1)
list1.pack()
colocar_scrollbar(list1,scroll1)
mitexto=StringVar()
label1=Label(v0,textvar=mitexto)
label1.pack()
def cargarlistbox(lista,listbox):
ind,largo=0,len(lista)
while ind < largo:
listbox.insert(END,lista[ind])
ind+=1
ListaNombres=['Laura','Roger','Fabiola']
def imprimir_en_label():
label1.after(100, imprimir_en_label) # Llamada recursiva con
.after
ind = list1.curselection()
if list1.curselection() != ():
sel = list1.get(ind)
mitexto.set(sel)
cargarlistbox(ListaNombres,list1)
imprimir_en_label()
v0.mainloop()
Producido
La funcin imprimir_en_label es la que llama la atencin en este
caso, es una funcin que se llama as misma con el evento
objeto.after(tiempo(milisegundos),funcin).
Cada 100 milisegundos verifica cul elemento est seleccionado.
Listbox.curselection() retorna la posicin seleccionada, y
Listbox.get(posicin) devuelve el texto seleccionado. Otra forma
de realizar esto es con una implementacin de objeto.bind
Ejemplo 18:
Para este ejemplo lo que haremos es una funcin para limpiar un
control del tipo Listbox. La funcin elimina todos los
elementos del listbox cuando uno le da click al botn ELIMINAR
TODOS
from Tkinter import *
v0=Tk()
def colocar_scrollbar(listbox,scrollbar):
scrollbar.config(command=listbox.yview)
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.pack(side=RIGHT, fill=Y)
listbox.pack(side=LEFT, fill=Y)
frame1=Frame(v0)
frame1.pack()
scroll1=Scrollbar(frame1)
list1=Listbox(frame1)
list1.pack()
colocar_scrollbar(list1,scroll1)
mitexto=StringVar()
label1=Label(v0,textvar=mitexto)
label1.pack()
b1=Button(v0,text="ELIMINAR TODOS",command=lambda:
limpiar_listbox(list1))
b1.pack()
def cargarlistbox(lista,listbox):
ind,largo=0,len(lista)
while ind < largo:
listbox.insert(END,lista[ind])
ind+=1
ListaNombres=['Laura','Roger','Fabiola','Yendry','Esteban','Mart
a','Elias']
def imprimir_en_label():
label1.after(100, imprimir_en_label) # Llamada recursiva con
.after
ind = list1.curselection()
if list1.curselection() != ():
sel = list1.get(ind)
mitexto.set(sel)
def limpiar_listbox(listbox):
while listbox.size() > 0:
listbox.delete(0)
cargarlistbox(ListaNombres,list1)
imprimir_en_label()
v0.mainloop()
Ejemplo 19:
Para personalizar los colores de los objetos se utilizan:
bg: Se encarga del color de fondo
fg: Se encarga del color del texto
Hay otras propiedades ms que se pueden encontrar en
documentacin sobre Tkinter por la web. Veamos el ejemplo de
arriba
ms personalizado
from Tkinter import *
v0=Tk()
v0.config(bg="black")
v0.title("Ejemplo personalizado")
v0.geometry("210x190")
def colocar_scrollbar(listbox,scrollbar):
scrollbar.config(command=listbox.yview)
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.pack(side=RIGHT, fill=Y)
listbox.pack(side=LEFT, fill=Y)
frame1=Frame(v0,bg="black")
frame1.pack()
scroll1=Scrollbar(frame1)
list1=Listbox(frame1,bg="black",fg="white")
list1.pack()
colocar_scrollbar(list1,scroll1)
mitexto=StringVar()
label1=Label(v0,textvar=mitexto,bg="black",fg="white")
label1.pack()
b1=Button(v0,text="ELIMINAR TODOS",command=lambda:
limpiar_listbox(list1),bg="black",fg="white")
b1.pack()
def cargarlistbox(lista,listbox):
ind,largo=0,len(lista)
while ind < largo:
listbox.insert(END,lista[ind])
ind+=1
ListaNombres=['Laura','Roger','Fabiola','Yendry','Esteban','Mart
a','Elias']
def imprimir_en_label():
label1.after(100, imprimir_en_label) # Llamada recursiva con
.after
ind = list1.curselection()
if list1.curselection() != ():
sel = list1.get(ind)
mitexto.set(sel)
def limpiar_listbox(listbox):
while listbox.size() > 0:
listbox.delete(0)
cargarlistbox(ListaNombres,list1)
imprimir_en_label()
v0.mainloop()
nmeros del 1 al 7
misma carpeta
encuentra el cdigo
ruta, por
http://i.imgur.com/qTKZv.gif
Cabe sealar que para cambiarle el formato a una imgen basta con
quitarle la extensin que tiene y ponerle otra. Debe ser
previamente abierta con un programa que permita abrir el formato en el
que est la imgen original, y guardarla en formato
GIF.
v0.config(menu=menu1)
menu1_1 = Menu(menu1, tearoff=0)
menu1.add_cascade(label="AMARILLO", menu=menu1_1)
menu1_1_1 = Menu(menu1_1, tearoff=0)
menu1_1.add_cascade(label="FRUTAS", menu=menu1_1_1)
menu1_1_1.add_command(label="BANANO",command=lambda: imprimir("BANANO"))
menu1_1_1.add_command(label="PIA",command=lambda: imprimir("PIA"))
menu1_2 = Menu(menu1, tearoff=0)
menu1.add_cascade(label="ROJO", menu=menu1_2)
menu1_2.add_command(label="SANGRE",command=lambda: imprimir("SANGRE"))
menu1_2.add_separator()
menu1_2_1 = Menu(menu1_2, tearoff=0)
menu1_2.add_cascade(label="FRUTAS", menu=menu1_2_1)
menu1_2_1.add_command(label="FRESA",command=lambda: imprimir("FRESA"))
menu1_2_1.add_command(label="MANZANA",command=lambda:
imprimir("MANZANA"))
v0.mainloop()
Ejemplo 27:
Para crear nuestro Splash Screen, lo que debemos hacer es crear una pausa
entre el Splash Screen, y la ventana principal,
la cual debe estar oculta. Eso lo podemos realizar de la siguiente
manera:
from Tkinter import *
v0=Tk()
imagen1=PhotoImage(file="C:\COUNTER.gif")
label1 = Label(v0, image=imagen1)
label1.grid(row=1,column=1)
def
def
def
def
menu1 = Menu(v0)
v0.config(menu=menu1)
menu1_1 = Menu(menu1, tearoff=0)
menu1.add_cascade(label="AMARILLO", menu=menu1_1)
menu1_1_1 = Menu(menu1_1, tearoff=0)
menu1_1.add_cascade(label="FRUTAS", menu=menu1_1_1)
menu1_1_1.add_command(label="BANANO",command=lambda: imprimir("BANANO"))
menu1_1_1.add_command(label="PIA",command=lambda: imprimir("PIA"))
Por lo que para nosotros que debemos hacerlo a pura lnea de cdigo,
puede ser un poco ms complicado. Sin embargo, como es
v0=Tk()
v0.geometry("200x200")
b1=Button(v0,text="ARRIBA").pack(side=TOP)
b3=Button(v0,text="ABAJO").pack(side=BOTTOM)
b2=Button(v0,text="IZQUIERDO").pack(side=LEFT)
b4=Button(v0,text="DERECHO").pack(side=RIGHT)
v0.mainloop()
Ejemplo 29:
Y el orden de colocacin en el cdigo s importa. Nte que primero est
TOP, luego BOTTOM, luego LEFT, y luego RIGHT. Pero
si por ejemplo colocamos este orden
from Tkinter import *
v0=Tk()
v0.geometry("200x200")
b1=Button(v0,text="ARRIBA").pack(side=TOP)
b2=Button(v0,text="IZQUIERDO").pack(side=LEFT)
b3=Button(v0,text="ABAJO").pack(side=BOTTOM)
b4=Button(v0,text="DERECHO").pack(side=RIGHT)
v0.mainloop()
Tendremos que los botones no se alinean de manera correcta.
Ejemplo 30:
Es importante recordar que tambin podemos colocar el cdigo de la
siguiente forma:
from Tkinter import *
v0=Tk()
v0.geometry("200x200")
b1=Button(v0,text="ARRIBA")
b1.pack(side=TOP)
b3=Button(v0,text="ABAJO")
b3.pack(side=BOTTOM)
b2=Button(v0,text="IZQUIERDO")
b2.pack(side=LEFT)
b4=Button(v0,text="DERECHO")
b4.pack(side=RIGHT)
v0.mainloop()
x
x
x
x
x
t
t
t
t
t
o").pack()
o").pack()
o").pack()
o").pack()
o").pack()
frame2=Frame(frame0)
Label(frame2,text="o t x
Label(frame2,text="o t x
Label(frame2,text="o t x
Label(frame2,text="o t x
Label(frame2,text="o t x
frame2.pack(side=RIGHT)
e
e
e
e
e
T").pack()
T").pack()
T").pack()
T").pack()
T").pack()
v0.mainloop()
Ejemplo 32
Tambin tenemos propiedades para algunos objetos grficos, que sirven
para acomodamiento en las ventanas. Se llaman expand
y fill. Veamos un ejemplo de cmo funciona fill
from Tkinter import *
v0=Tk()
v0.geometry("200x200")
l1=Label(v0,text="BIENVENIDO AL PROYECTO")
l1.pack()
frame0=Frame(v0)
frame0.pack(side=TOP,fill=BOTH)
frame1=Frame(frame0)
Label(frame1,text="T e
Label(frame1,text="T e
Label(frame1,text="T e
Label(frame1,text="T e
Label(frame1,text="T e
frame1.pack(side=LEFT)
x
x
x
x
x
t
t
t
t
t
o").pack()
o").pack()
o").pack()
o").pack()
o").pack()
frame2=Frame(frame0)
Label(frame2,text="o t x
Label(frame2,text="o t x
Label(frame2,text="o t x
Label(frame2,text="o t x
Label(frame2,text="o t x
frame2.pack(side=RIGHT)
e
e
e
e
e
T").pack()
T").pack()
T").pack()
T").pack()
T").pack()
v0.mainloop()
Label(v0,text="BIENVENIDO AL PROYECTO").grid(row=1,column=2)
Label(v0,text="").grid(row=1,column=3)
Label(v0,text="T E X T O").grid(row=2,column=1)
Label(v0,text="T E X T O").grid(row=2,column=3)
Label(v0,text="T E X T O").grid(row=3,column=1)
Label(v0,text="T E X T O").grid(row=3,column=3)
Label(v0,text="T E X T O").grid(row=4,column=1)
Label(v0,text="T E X T O").grid(row=4,column=3)
Label(v0,text="T E X T O").grid(row=5,column=1)
Label(v0,text="T E X T O").grid(row=5,column=3)
Label(v0,text="T E X T O").grid(row=6,column=1)
Label(v0,text="T E X T O").grid(row=6,column=3)
v0.mainloop()
http://effbot.org/tkinterbook/grid.htm
matriz[0],matriz[1],matriz[2],matriz[3],matriz[4],matriz[5],matriz[6]
,matriz[7],matriz[8]=0,0,0,0,0,0,0,0,0
def declarar_ganador():
v0.after(200,declarar_ganador)
if gana():
limpiar_botones()
v0.withdraw()
v1=Toplevel(v0)
if ganador[0] == 1:
l1=Label(v1,text="Ganador: Jugador 1 (Azul)",font=(16))
color[0]="red"
if ganador[0] == 2:
l1=Label(v1,text="Ganador: Jugador 2 (Rojo)",font=(16))
color[0]="blue"
l1.pack()
b1=Button(v1,text="OK",command=lambda: v1.withdraw() or
v0.deiconify(),font=(16))
b1.pack()
v1.focus_force()
def reiniciar_juego():
v0.after(200,reiniciar_juego)
if juego_finalizado():
v0.withdraw()
v1=Toplevel(v0)
v1.title("Finalizado")
v1.resizable(0,0)
l1=Label(v1,text="Nadie Gan.",font=(16))
l1.pack()
b1=Button(v1,text="OK",command=lambda: v1.withdraw() or
v0.deiconify(),font=(16))
b1.pack()
doit(limpiar_botones())
def jugar(posicion):
if matriz[posicion] != 0:
print "Ya se jug en esta posicin"
else:
if color[0]=="red":
matriz[posicion]=1
color[0]="blue"
nl[posicion].config(bg=color)
elif color[0]=="blue":
matriz[posicion]=2
color[0]="red"
nl[posicion].config(bg=color)
print "ESTADO DE LA MATRIZ:",matriz
gato()
declarar_ganador()
reiniciar_juego()
v0.mainloop()
llenar_listbox(Turistas,l2)
if gsel.get() == "Turismo":
llenar_listbox(Admin,l2)
ListaCarreras=["Computacion","Agronomia",
"Administracion","Turismo"]
Compu=["Ana","Alejandra","Ronald","Andrey"]
Agro=["Jefry"]
Turistas=["Laura","Jose Mara"]
Admin=["Andrea","Roberta"]
l1=Listbox(v0)
l1.grid(row=1,column=0)
l2=Listbox(v0)
l2.grid(row=1,column=1)
b1=Button(v0,text="SALIR",width=40,command=v0.destroy)
b1.grid(row=2,column=0,columnspan=2)
vargrupo()
llenar_listbox(ListaCarreras,l1)
v0.mainloop()
Button(v0,width=6,height=3).grid(row=3,column=0)
Button(v0,width=6,height=3).grid(row=4,column=0)
Button(v0,width=6,height=3).grid(row=5,column=0)
Button(v0,width=6,height=3).grid(row=6,column=0)
Button(v0,width=6,height=3).grid(row=7,column=0)
Button(v0,width=6,height=3).grid(row=8,column=0)
Button(v0,width=6,height=3).grid(row=1,column=11)
Button(v0,width=6,height=3).grid(row=2,column=11)
Button(v0,width=6,height=3).grid(row=3,column=11)
Button(v0,width=6,height=3).grid(row=4,column=11)
Button(v0,width=6,height=3).grid(row=5,column=11)
Button(v0,width=6,height=3).grid(row=6,column=11)
Button(v0,width=6,height=3).grid(row=7,column=11)
Button(v0,width=6,height=3).grid(row=8,column=11)
Button(v0,width=6,height=3).grid(row=8,column=2)
Button(v0,width=6,height=3).grid(row=8,column=3)
Button(v0,width=6,height=3).grid(row=8,column=4)
Button(v0,width=6,height=3).grid(row=8,column=5)
Button(v0,width=6,height=3).grid(row=8,column=6)
Button(v0,width=6,height=3).grid(row=8,column=7)
Button(v0,width=6,height=3).grid(row=8,column=8)
Button(v0,width=6,height=3).grid(row=8,column=9)
Button(v0,width=6,height=3).grid(row=8,column=10)
Button(v0,width=66,height=25,text="UN GRAN
CLICK").grid(row=1,column=1,rowspan=7,columnspan=10)
v0.mainloop()
Ejemplo 38
Y un formulario de contacto:
# -*- coding: utf-8 -*from Tkinter import *
v0=Tk()
v0.resizable(0,0)
v0.title("FORMULARIO")
Label(v0,text="Formulario de
Contacto",width=50).grid(row=0,column=0,columnspan=4)
Label(v0,text="Nombre: ").grid(row=1,column=0,sticky=W)
Entry(v0).grid(row=1,column=2)
Label(v0,text="Email: ").grid(row=2,column=0,sticky=W)
Entry(v0).grid(row=2,column=2)
Label(v0,text="Telfono: ").grid(row=3,column=0,sticky=W)
Entry(v0).grid(row=3,column=2)
Label(v0,text="Profesin: ").grid(row=4,column=0,sticky=W)
Entry(v0).grid(row=4,column=2)
Label(v0,text="Cdula: ").grid(row=5,column=0,sticky=W)
Entry(v0).grid(row=5,column=2)
l1=Listbox(v0,height=6)
l1.grid(row=0,column=3,rowspan=20)
l1.insert(END,"Costa
Rica"),l1.insert(END,"Croacia"),l1.insert(END,"Estados Unidos")
Button(v0,text="Registrar",width=50).grid(row=10,column=0,column
span=4)
v0.mainloop()
26. BINARIUM
1001010101010010010101010010110010101010100100101010100101
0100101010101001001010101001001001010101010010010101010010
1001010101010010010101010010110010101010100100101010100101
0100101010101001001010101001001001010101010010010101010010
1001010101010010010101010010110010101010100100101010100101
0100101010101001001010101001001001010101010010010101010010
1001010101010010010101010010110010101010100100101010100101
0100101010101001001010101001001001010101010010010101010010
1001010101010010010101010010110010101010100100101010100101
0100101010101001001010101001001001010101010010010101010010
1001010101010010010101010010110010101010100100101010100101
0100101010101001001010101001001001010101010010010101010010
"""
def ds(h):
f,g=0,len(h)
while f < g:
if h[f] != " ":
return False
break
f+=1
return True
def s(h):
taud=h
if not ds(h):
h = " " + h[0:-1]
return h
else: return c
def j(t): print t
def i():
a.after(1,i)
b.set(s(b.get()))
label1=Label(a,textvar=b,font=(16)).pack(side=TOP)
i()
a.mainloop()
from wx import *
v0 = PySimpleApp() # Elemento de aplicacin
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 tamao
from wx import *
v0 = PySimpleApp() # Elemento de aplicacin
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
Adems le hemos cambiado el color de fondo. Se empieza a notar
que algunas cosas son ms sencillas y manejables desde wxPython
que desde Tkinter. A estas alturas debera irnos quedando de la
siguiente forma: