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

Índice de la sección
«Interfaz gráfica con Tkinter»



Métodos

editar

Los siguiente métodos nos darán la posibilidad de personalizar al máximo nuestra aplicación y cada una de sus ventanas

iconify

editar
Descripción
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 será verlo con unos ejemplos.
Argumentos
No tiene
Ejemplos
  • En este ejemplo usamos el método 'iconify' en un botón para minimizar la ventana cuando se haga click sobre él:
import Tkinter

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


  • En este otro ejemplo creamos un botón 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
Descripción
Al contrario de como vimos en 'iconify' que podíamos minimizar la ventana, con 'deiconify' podemos restaurar la ventana, como paso con 'iconify' veámoslo con unos ejemplos
Argumentos
No tiene
Ejemplos
  • Esta es una variación de uno de los ejemplos que ya habíamos visto, pero en este cuando hacemos click en el botón '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()


Descripción
Permite indicar el título de la ventana. Podría decirse que este valor se hereda ya que si creamos una nueva ventana a través de Toplevel esta tomaría 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 título de la ventana padre:
root = Tkinter.Tk()
root.title("Bienvenido a Codigo Python")
otra_ventana = Tkinter.Toplevel(root)
root.mainloop()


Archivo:Diseno/metodos/img/title-02.jpg
  • Ejemplo de dos ventanas con títulos distintos:
root = Tkinter.Tk()
root.title("Bienvenido a")
otra_ventana = Tkinter.Toplevel(root)
otra_ventana.title("Codigo Python")
root.mainloop()

geometry

editar
Descripción
Este método es uno, junto con el resto (no hay que desmerecer la función de ninguno), muy importante, ya que nos permitirá indicar tanto el tamaño de la ventana como su posición, esto nos permitirá trabajar con varias ventanas de una forma más prolija y agradable para el usuario si se planifican bien los objetivos y se utilizan las herramientas adecuadas; en este caso hablaremos de 'geometry'.
Para su utilización tenemos dos posibilidades, una es indicar solo el tamaño de la ventana usando la siguiente forma:
root.geometry("WxH")
o indicando además del tamaño de la ventana la posición 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 deberá ser en pixeles, seguido de estos dos pueden ir de manera opcional dos valores mas que indicaran la posición de la ventana en la pantalla donde se deberá indicar estos valores, también en pixeles, para el eje x y el eje y. Una observación que se debe hacer es que los valores que tome tanto el ancho como el alto de la ventana ademas de ser únicamente en pixeles deberán de ser números enteros positivos.
El significado del signo mas y menos indica que si se le pasa un valor positivo este será 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 diéramos argumentos nos devolvería la medida y la posición 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: Posición en el eje X
  • y: Posición en el eje Y
Ejemplos
#!/usr/bin/env python

import Tkinter

# Primera 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 serán negativos.
Archivo:Diseno/metodos/img/geometry.jpg
  • Si no le pasamos ningún argumento nos devolverá el tamaño y la posición de la ventana como vemos a continuación:
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
Descripción
Establece los valores máximos de la medida de la ventana, tanto su ancho como su alto. Estos valores se entregan en píxeles, 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
Descripción
Establece los valores mínimos de la medida de la ventana, tanto su ancho como su alto. Estos valores se entregan en píxeles siendo el primer valor el ancho y el segundo el largo, aunque el orden de estos valores puede alterarse como se observa en los ejemplos.
Argumentos
(W, H)
Donde:
W = Ancho (Width)
H = Alto (Height)
o también de esta forma
(width=W, height=H)
Ejemplos
root.geometry("300x300")
root.minsize(400, 600)
root.geometry("300x300")
root.minsize(height=600, witdh=400)
Descripción
Podemos cambiar el estado en el que se encuentra la ventana a 'normal', 'iconic' o 'withdraw'. Con la opción 'normal' la ventana se comporta normalmente apareciendo en la ventana, con la opción 'iconic' obtenemos los mismos resultados que el método 'iconify()', minimizando la ventana y por último con 'withdraw' obtendremos, como se imaginarán, 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
Descripción
Nos permite indicar si la ventana debe o no poder redimensionarse, ya sea en su ancho o su alto, dándole a sus parámetros 'width'(Ancho) y 'height' (Largo) los valores 'True' o 'False'. Con True habilitamos el redimensionamiento y con False los deshabilitamos. Si estamos usando a su vez los métodos 'minsize' y/o 'maxsize' el valor máximo al cual se pueda redimensionar dependerá de estos dos métodos 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 también esta forma:
(width=W, height=H)
Ejemplos
  • Redimensionar solo el ancho:
root.resizable(width=True, height=False)


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


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

withdraw

editar
Descripción
Este método permite ocultar una ventana; la forma que podemos usar para restaurarla es con 'deiconify()' o 'iconify()', o a traves del método 'state' que nos puede resultar más cómodo de usar. No se requiere de ningún 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
Descripción
Este método lo que 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.

Python: Índice · Introducción · Enlaces

 

Instalación de Python · Generalidades · Funciones, constantes nativas · Tipos de datos nativos · Herramientas de control de flujo · Definición de funciones · Leer y escribir archivos · Su primer programa en Python · Entrada y salida · Estructuras de datos · Errores y excepciones

Interfaces gráficas · Módulos relacionados con el sonido · Módulos relacionados con el tiempo · Módulos relacionados con la matemática