Cómo crear una ventana de Tkinter con un tamaño constante

Jinku Hu 25 junio 2020
Cómo crear una ventana de Tkinter con un tamaño constante

El tamaño de la ventana de Tkinter es por defecto redimensionable incluso si asigna la anchura y la altura cuando se inicia la instancia de la ventana.

import tkinter as tk

app = tk.Tk()

app.geometry("200x200")

app.mainloop()

Puede arrastrar la ventana creada por los códigos anteriores para obtener diferentes tamaños de ventana. La función redimensionable debe utilizarse para restringir el tamaño de la anchura y la altura.

import tkinter as tk

app = tk.Tk()

app.geometry("200x200")
app.resizable(width=0, height=0)

app.mainloop()

app.resizable(width=0, height=0) no permite que tanto el ancho como el alto sean redimensionados.

Establezca el marco con un tamaño constante

El marco dentro de la ventana es un poco similar a la ventana, en el sentido de que se redimensiona automáticamente aunque defina el ancho y el alto de ese marco.

import tkinter as tk

app = tk.Tk()

app.geometry("200x200")
app.resizable(0, 0)

backFrame = tk.Frame(master=app, width=200, height=200, bg="blue").pack()

button1 = tk.Button(master=backFrame, text="Button 1", bg="blue", fg="red").pack()
button2 = tk.Button(master=backFrame, text="Button 2", bg="blue", fg="green").pack()
button3 = tk.Label(master=backFrame, text="Button 3", bg="red", fg="blue").pack()

app.mainloop()

La interfaz gráfica de usuario que esperábamos es como la que se muestra a continuación,

El marco Tkinter no es ajustable

Pero lo que obtenemos después de ejecutar los códigos anteriores es,

Tkinter Frame Redimensionable

El marco backFrame se redimensiona automáticamente para que quepa en los widgets que se adjuntan a él. O en otras palabras, los widgets dentro de backFrame controlan el tamaño de su marco padre.

Puede deshabilitar el marco para que se ajuste a sus widgets estableciendo pack_propagate(0).

El código correcto para congelar el tamaño del marco es,

import tkinter as tk

app = tk.Tk()

app.geometry("200x200")
app.resizable(0, 0)

backFrame = tk.Frame(master=app, width=200, height=200, bg="blue")
backFrame.pack()
backFrame.propagate(0)

button1 = tk.Button(master=backFrame, text="Button 1", bg="blue", fg="red").pack()
button2 = tk.Button(master=backFrame, text="Button 2", bg="blue", fg="green").pack()
button3 = tk.Label(master=backFrame, text="Button 3", bg="red", fg="blue").pack()

app.mainloop()
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - Tkinter Geometry