Python Language
tkinter
Buscar..
Introducción
Lanzado en Tkinter es la biblioteca GUI (interfaz gráfica de usuario) más popular de Python. Este tema explica el uso adecuado de esta biblioteca y sus características.
Observaciones
La capitalización del módulo tkinter es diferente entre Python 2 y 3. Para Python 2 use lo siguiente:
from Tkinter import * # Capitalized
Para Python 3 usa lo siguiente:
from tkinter import * # Lowercase
Para el código que funciona con Python 2 y 3, puede hacer
try:
from Tkinter import *
except ImportError:
from tkinter import *
o
from sys import version_info
if version_info.major == 2:
from Tkinter import *
elif version_info.major == 3:
from tkinter import *
Ver la Documentación tkinter para más detalles.
Una aplicación tkinter mínima
tkinter
es un kit de herramientas de GUI que proporciona un envoltorio alrededor de la biblioteca de GUI de Tk / Tcl y se incluye con Python. El siguiente código crea una nueva ventana usando tkinter
y coloca algún texto en el cuerpo de la ventana.
Nota: En Python 2, el uso de mayúsculas puede ser ligeramente diferente, consulte la sección de Comentarios a continuación.
import tkinter as tk
# GUI window is a subclass of the basic tkinter Frame object
class HelloWorldFrame(tk.Frame):
def __init__(self, master):
# Call superclass constructor
tk.Frame.__init__(self, master)
# Place frame into main window
self.grid()
# Create text box with "Hello World" text
hello = tk.Label(self, text="Hello World! This label can hold strings!")
# Place text box into frame
hello.grid(row=0, column=0)
# Spawn window
if __name__ == "__main__":
# Create main window object
root = tk.Tk()
# Set title of window
root.title("Hello World!")
# Instantiate HelloWorldFrame object
hello_frame = HelloWorldFrame(root)
# Start GUI
hello_frame.mainloop()
Gerentes de geometría
Tkinter tiene tres mecanismos para la gestión de la geometría: place
, pack
y grid
.
El place
gestor utiliza coordenadas absolutas de píxeles.
El gestor de pack
coloca los widgets en uno de los 4 lados. Los nuevos widgets se colocan al lado de los widgets existentes.
El administrador de grid
coloca los widgets en una cuadrícula similar a una hoja de cálculo de cambio de tamaño dinámico.
Lugar
Los argumentos de palabras clave más comunes para widget.place
son los siguientes:
-
x
, la coordenada x absoluta del widget -
y
, la coordenada y absoluta del widget -
height
, la altura absoluta del widget -
width
, el ancho absoluto del widget
Un ejemplo de código usando place
:
class PlaceExample(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.grid()
top_text=Label(master,text="This is on top at the origin")
#top_text.pack()
top_text.place(x=0,y=0,height=50,width=200)
bottom_right_text=Label(master,text="This is at position 200,400")
#top_text.pack()
bottom_right_text.place(x=200,y=400,height=50,width=200)
# Spawn Window
if __name__=="__main__":
root=Tk()
place_frame=PlaceExample(root)
place_frame.mainloop()
Paquete
widget.pack
puede tomar los siguientes argumentos de palabras clave:
-
expand
, ya sea para llenar o no el espacio dejado por el padre -
fill
, si desea expandir para llenar todo el espacio (NINGUNO (predeterminado), X, Y o AMBOS) -
side
, el lado contra el que empacar (TOP (predeterminado), ABAJO, IZQUIERDO o DERECHO)
Cuadrícula
Los argumentos de palabras clave más utilizados de widget.grid
son los siguientes:
-
row
, la fila del widget (por defecto el más pequeño desocupado) -
rowspan
, el número de columnas que un widget abarca (valor predeterminado 1) -
column
, la columna del widget (por defecto 0) -
columnspan
, el número de columnas que abarca un widget (por defecto 1) -
sticky
, dónde colocar el widget si la celda de la cuadrícula es más grande que él (combinación de N, NE, E, SE, S, SW, W, NW)
Las filas y columnas están indexadas a cero. Las filas aumentan bajando y las columnas aumentan yendo a la derecha.
Un ejemplo de código usando grid
:
from tkinter import *
class GridExample(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.grid()
top_text=Label(self,text="This text appears on top left")
top_text.grid() # Default position 0, 0
bottom_text=Label(self,text="This text appears on bottom left")
bottom_text.grid() # Default position 1, 0
right_text=Label(self,text="This text appears on the right and spans both rows",
wraplength=100)
# Position is 0,1
# Rowspan means actual position is [0-1],1
right_text.grid(row=0,column=1,rowspan=2)
# Spawn Window
if __name__=="__main__":
root=Tk()
grid_frame=GridExample(root)
grid_frame.mainloop()
¡Nunca mezcle el pack
y la grid
dentro del mismo marco! ¡Al hacerlo se producirá un interbloqueo en la aplicación!