Python/Interfaz gráfica con Tkinter/Gestión de ventanas

De Wikilibros, la colección de libros de texto de contenido libre.
Ir a la navegación Ir a la búsqueda

Métodos[editar]

Los siguiente metodos nos daran la posibilidad de personalizar al maximo nuestra aplicacion y cada una de sus ventanas

iconify[editar]

Descripcion
Permite minimizar la ventana que le indiquemos, esto es útil por ejemplo, para minimizar una ventana padre cuando se abre una ventana hija. Lo mejor sera verlo con unos ejemplos.
Argumentos
No tiene
Ejemplos
  • En este ejemplo usamos el metodo 'iconify' en un boton para minimizar la ventana cuando se haga click sobre el:
import Tkinter

root = Tkinter.Tk()
boton = Tkinter.Button(root, text="Minimizar", command=root.iconify)
boton.pack()
root.mainloop()


  • En este otro ejemplo creamos un boton que abre otra ventana y minimiza la ventana padre
import Tkinter

def funcion():
    otra_ventana = Tkinter.Toplevel(root)
    root.iconify()

root = Tkinter.Tk()
boton = Tkinter.Button(root, text="Abrir otra ventana", command=funcion)
boton.pack()
root.mainloop()



deiconify[editar]

Descripcion
Al contrario de como vimos en 'iconify' que podiamos minimizar la ventana, con 'deiconify' podemos restaurar la ventana, como paso con 'iconify' veamoslo con unos ejemplos
Argumentos
No tiene
Ejemplos
  • Esta es una variacion de uno de los ejemplos que ya habiamos visto, pero en este cuando hacemos click en el boton 'Minimizar' este se minimiza pero pasado 5 segundos se vuelve a restaurar la ventana.
import Tkinter
import time

def funcion():
    root.iconify()
    time.sleep(5)
    root.deiconify()

root = Tkinter.Tk()
boton = Tkinter.Button(root, text="Minimizar", command=funcion)
boton.pack()
root.mainloop()



title[editar]

Descripcion
Permite indicar el titulo de la ventana. Podria decirse que este valor se hereda ya que si creamos una nueva ventana a traves de Toplevel esta tomaria el nombre de la ventana padre.
Argumentos
String (Cadena)
Ejemplos
  • Ejemplos simple:
root = Tkinter.Tk()
root.title("Bienvenido a Codigo Python")
root.mainloop()


  • Heredando el titulo de la ventana padre:
root = Tkinter.Tk()
root.title("Bienvenido a Codigo Python")
otra_ventana = Tkinter.Toplevel(root)
root.mainloop()


  • Ejemplo de dos ventanas con titulos distintos:
root = Tkinter.Tk()
root.title("Bienvenido a")
otra_ventana = Tkinter.Toplevel(root)
otra_ventana.title("Codigo Python")
root.mainloop()




geometry[editar]

Descripcion
Este metodo es uno, junto con el resto (no hay que desmerecerer la funcion de ninguno :) ), muy importante ya que nos permitira indicar tanto el tamaño de la ventana como su posicion, esto nos permitira trabajar con varias ventanas de una forma mas prolija y agradable para el usuario si se planifican bien los objetivos y se utilizan las herrramientas adecuadas en este caso hablaremos de 'geometry'.
Para su utilizacion tenemos dos posibilidades una es indicar solo el tamaño de la ventana usando la siguiente forma
root.geometry("WxH")
o indicando ademas del tamaño de la ventana la posicion de la misma de la siguiente forma
root.geometry("WxH±X±Y")
El ancho y el alto deben ser reemplazados por las letras W y H respectivamente, separadas por una letra 'x' y su valor debera ser en pixeles, seguido de estos dos pueden ir de manera opcional dos valores mas que indicaran la posicion de la ventana en la pantalla donde se debera indicar estos valores, tambien en pixeles, para el eje x y el eje y. Una observacion que se debe hacer es que los valores que tome tanto el ancho como el alto de la ventana ademas de ser unicamente en pixeles deberan de ser numeros enteros positivos.
El significado del signo mas y menos indica que si se le pasa un valor positivo este sera contado desde la esquina superior izquierda de la pantalla en cambio si le pasamos un valor negativo este sera tomado en cuenta partiendo como origen desde la esquina inferior derecha; este es un detalle que hay que tener muy en cuenta cuando deseamos posicionar una ventana.
Si no le dieramos argumentos nos devolveria la medida y la posicion de la ventana.
Argumentos
"wxh±x±y"
Donde las letras tienen este significado:
  • w: Ancho de la ventana en pixeles
  • h: Alto de la ventana en pixeles
  • x: Posicion en el eje X
  • y: Posicion en el eje Y
Ejemplos
#!/usr/bin/env python

import Tkinter

# Primer ventana con valores positivos
primer_ventana = Tkinter.Tk()
primer_ventana.geometry("300x300+0+0")
# A modo estetico le di un titulo
primer_ventana.title("Posicion x=+0 y=+0")
# Este tambien es estetico y no influye en el uso del metodo
etiqueta = Tkinter.Label(primer_ventana, text="Posicion x=+0 y=+0", width=100, height=100, anchor="center")
etiqueta.pack()

# Segunda ventana con valores negativos
segunda_ventana = Tkinter.Tk()
segunda_ventana.geometry("300x300-0-0")
segunda_ventana.title("Posicion x=-0 y=-0")
etiqueta = Tkinter.Label(segunda_ventana, text="Posicion x=-0 y=-0", width=100, height=100, anchor="center")
etiqueta.pack()

primer_ventana.mainloop()
segunda_ventana.mainloop()
Como se observa se crean dos ventanas donde a una se le pasa valores positivos y a la otra por el contrario sus valores seran negativos.
  • Si no le pasamos ningun argumento nos devolveria el tamaño y la posicion de la ventana como vemos a continuacion:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
>>> root = Tkinter.Tk()
>>> root.geometry()
'200x200+0+24'
>>> root.geometry("400x400+50+50")
''
>>> root.geometry()
'400x400+50+50'
>>>



maxsize[editar]

Descripcion
Establece los valores maximos de la medida de la ventana, tanto su ancho como su alto. Estos valores se entregan en pixeles siendo el primer valor el ancho y el segundo el largo, aunque el orden de estos valores pueden alterarse como se observa en los ejemplos.
Argumentos
(W, H)
Donde:
W = Ancho (Width)
H = Alto (Height)

o tambien de esta forma

(width=W, height=H)

Ejemplos
root.geometry("300x300")
root.maxsize(400, 600)
root.geometry("300x300")
root.maxsize(height=600, witdh=400)

minsize[editar]

Descripcion
Establece los valores minimos de la medida de la ventana, tanto su ancho como su alto. Estos valores se entregan en pixeles siendo el primer valor el ancho y el segundo el largo, aunque el orden de estos valores pueden alterarse como se observa en los ejemplos.
Argumentos
(W, H)
Donde:
W = Ancho (Width)
H = Alto (Height)
o tambien de esta forma
(width=W, height=H)
Ejemplos
root.geometry("300x300")
root.minsize(400, 600)
root.geometry("300x300")
root.minsize(height=600, witdh=400)

state[editar]

Descripcion
Podemos cambiar el estado en el que se encuentra la ventana a 'normal', 'iconic' o 'withdraw'. Con la opcion 'normal' la ventana se comporta normalmente apareciendo en la ventana, con la opcion 'iconic' obtenemos los mismos resultados que el metodo 'iconify()' minimizando la ventana y por ultimo con 'withdraw' obtendremos como se imaginaran el mismo resultado que con 'withdraw' ocultando la ventana.
Argumentos
newstate=ESTADO
Donde ESTADO toma estos valores:
"normal"
"withdraw"
"iconic"
Ejemplos
import Tkinter
import time

def funcion():
    root.state(newstate='withdraw')
    time.sleep(5)
    root.state(newstate='normal')

root = Tkinter.Tk()
boton = Tkinter.Button(root, text="Probando el metodo state", command=funcion)
boton.pack()
root.mainloop()

resizable[editar]

Descripcion
Nos permite indicar que si la ventana debe o no poder redimensionarse ya sea en su ancho o el su alto, dandole a sus parametros 'width'(Ancho) y 'height' (Largo) los valores 'True' o 'False'. Con True habilitamos el redimencionamiento y con False los deshabilitamos. Si estamos usando a su ves los metodos 'minsize' y/o 'maxsize' el valor maximo al cual se pueda redimencionar dependera de estos dos metodos en caso de existir.
Argumentos
(W, H)
Donde:
W = Al ancho y puede tomar los valores True o False
H = Al alto y puede tomar los valores True o False
o tambien esta forma:
(width=W, height=H)
Ejemplos
  • Redimencionar solo el ancho:
root.resizable(width=True, height=False)


  • Redimencionar solo el alto:
root.resizable(width=False, height=True)


  • Bloquear el redimencionamiento de la ventana:
root.resizable(width=False, height=False)



withdraw[editar]

Descripcion
Este metodo permite ocultar una ventana; la forma que podemos usar para restaurarla es con 'deiconify()' o 'iconify()', o a traves del metodo 'state' que nos puede resultar mas comodo de usar. No se requiere de ningun argumento para funcionar como sucede tanto con 'deiconify' e 'iconify'.
root.withdraw()


Argumentos
No tiene
Ejemplos
#!/usr/bin/env python

import Tkinter
import time

def funcion():
    root.withdraw()
    time.sleep(5)
    root.deiconify()

root = Tkinter.Tk()
boton = Tkinter.Button(root, text="Probando el metodo withdraw", command=funcion)
boton.pack()
root.mainloop()

transient[editar]

Descripcion
Este método lo permite es hacer que una ventana permanezca siempre encima de otra, si la ventana padre se minimiza la ventana que lleva el método '.transient()' también lo hará y si esta ventana padre se cerrara la ventana hija también se cerraría.
Argumentos
Ejemplos
#!/usr/bin/env python

import Tkinter

root = Tkinter.Tk()
root.title("Ventana padre")
# Creamos una ventana hija de root
otra_ventana = Tkinter.Toplevel(root)
otra_ventana.title("Ventana hija")
# Este es solo para decoracion
etiqueta = Tkinter.Label(otra_ventana, text='Este es un ejemplo de transient')
etiqueta.pack()
# Posicionamos las dos ventanas para que sea mas claro el ejemplo
root.geometry("400x400+100+100")
otra_ventana.geometry("200x200+150+150")
# Y ahora si llamamos a este metodo
otra_ventana.transient(root)
root.mainloop()
Como ven si intentan mover la ventana padre observaran que esta permanece siempre debajo de la ventana hija.