tamaño letra entry ejemplos botones python button grid tkinter autoresize

python - entry - tamaño de letra en tkinter



¿Cómo crear una cuadrícula de botones con tamaño propio en tkinter? (3)

Estoy intentando crear una cuadrícula de botones (para lograr el efecto de celda seleccionable) con Tkinter.

Mi problema principal es que no puedo hacer que la grid y los botones se realicen automáticamente y se ajusten a la ventana principal.

Por ejemplo, cuando tengo un gran número de botones en la cuadrícula, en lugar de encoger los botones para que la cuadrícula se ajuste dentro de la ventana, obtengo un marco alargado que sale de la pantalla.

El efecto que estoy buscando es que la cuadrícula llene todo el espacio disponible, luego cambie el tamaño de sus celdas para que quepan dentro de ese espacio. He leído en la documentación, pero todavía no puedo entender cómo hacerlo funcionar.

Este es el código básico que es mi punto de partida:

def __init__(self): root = Tk() frame = Frame(root) frame.grid() #some widgets get added in the first 6 rows of the frame''s grid #initialize grid grid = Frame(frame) grid.grid(sticky=N+S+E+W, column=0, row=7, columnspan=2) #example values for x in range(60): for y in range(30): btn = Button(grid) btn.grid(column=x, row=y) root.mainloop()


Necesita configurar las filas y columnas para que tengan un peso distinto de cero para que ocupen el espacio adicional:

for x in range(60): Grid.columnconfigure(grid, x, weight=1) for y in range(30): Grid.rowconfigure(grid, y, weight=1)

También necesita configurar sus botones para que se expandan y llenen la celda :

btn.grid(column=x, row=y, sticky=N+S+E+W)

Esto tiene que hacerse todo el tiempo, así que aquí hay un ejemplo completo:

from tkinter import * root = Tk() frame=Frame(root) Grid.rowconfigure(root, 0, weight=1) Grid.columnconfigure(root, 0, weight=1) frame.grid(row=0, column=0, sticky=N+S+E+W) grid=Frame(frame) grid.grid(sticky=N+S+E+W, column=0, row=7, columnspan=2) Grid.rowconfigure(frame, 7, weight=1) Grid.columnconfigure(frame, 0, weight=1) #example values for x in range(10): for y in range(5): btn = Button(frame) btn.grid(column=x, row=y, sticky=N+S+E+W) for x in range(10): Grid.columnconfigure(frame, x, weight=1) for y in range(5): Grid.rowconfigure(frame, y, weight=1) root.mainloop()


Para hacer que los botones se expandan cuando la ventana esté maximizada, intente modificar la entrada button.grid de la siguiente manera:

btn.grid(column=x, row=y, sticky=N+S+E+W)


@Vaughn Cato dio una excelente respuesta aquí . Sin embargo, accidentalmente ha incluido un montón de código extraño en su ejemplo. Aquí hay un ejemplo completo más limpio y organizado que hace exactamente lo que hace su ejemplo.

from tkinter import * #Create & Configure root root = Tk() Grid.rowconfigure(root, 0, weight=1) Grid.columnconfigure(root, 0, weight=1) #Create & Configure frame frame=Frame(root) frame.grid(row=0, column=0, sticky=N+S+E+W) #Create a 5x10 (rows x columns) grid of buttons inside the frame for row_index in range(5): Grid.rowconfigure(frame, row_index, weight=1) for col_index in range(10): Grid.columnconfigure(frame, col_index, weight=1) btn = Button(frame) #create a button inside frame btn.grid(row=row_index, column=col_index, sticky=N+S+E+W) root.mainloop()

Capturas de pantalla:

Cuando se abre por primera vez (pequeño):

Después de maximizar la ventana: