¿Cómo evito que el frame se ajuste al contenido, dejarlo de un tamaño fijo?

publicado por: Anonymous

Estoy intentado usar un Frame de Tkinter usando Grid como geometry manager, pero este se ajusta al contenido, aunque tenga un tamaño definido.

El código que tengo es este:

from tkinter import font
import tkinter as tk
Ventana=tk.Tk()
Ventana.title("Calculo de Raices metodo Secante")
Ventana.configure(bg="#424949")
Ventana.geometry('1000x800')

frmBotones = tk.Frame(Ventana,bg="#7F8C8D",height=100,width=100,padx=5,pady=5)
frmBotones.grid(row=1, column=1, columnspan=2)

frmGrafica = tk.Frame(Ventana,bg="#D6DBDF",height=500,width=500)
frmGrafica.grid(row=2, column=1)

frmTabla = tk.Frame(Ventana,bg="#4D5656",height=500,width=500)
frmTabla.grid(row=2, column=2)


# Estos botones van dentro del frame pero el frame se ajusta a los botones
# y quiero dejarlo de un tamaño fijo:

Helvfont = font.Font(family="Helvetica", size=12, weight="bold")
tk.Button(frmBotones,text="graficar",font=Helvfont,fg="blue").grid(row=1,column=3)
tk.Button(frmBotones,text="Hola",font=Helvfont,fg="blue").grid(row=1,column=2)

Ventana.mainloop()

solución

Por defecto el grid manager que maneja el Frame intenta adaptar el tamaño de éste a su contenido de forma automática y redimensionarlo cada vez que un widget secundario cambia de tamaño. Este es normalmente el comportamiento esperado.

Puedes desactivar esta característica mediante el método grid_propagate del widget:

frmBotones.grid_propagate(False)

Con lo que el Frame quedará con un tamaño de 100 x 100 pixeles sin importar lo que contenga.

Por supuesto, esto implica que vas a tener que ajustar manualmente el tamaño de los botones que contiene.

pack tiene un método idéntico, pack_propagate, no así place ya que en este caso podemos definir la posición/tamaño (absoluto o relativo) de cada widget de forma explícita.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *