How to create a self resizing grid of buttons in tkinter? How to create a self resizing grid of buttons in tkinter? tkinter tkinter

How to create a self resizing grid of buttons in tkinter?


You need to configure the rows and columns to have a non-zero weight so that they will take up the extra space:

grid.columnconfigure(tuple(range(60)), weight=1)grid.rowconfigure(tuple(range(30)), weight=1)

You also need to configure your buttons so that they will expand to fill the cell:

btn.grid(column=x, row=y, sticky="news")

This has to be done all the way up, so here is a full example:

from tkinter import *root = Tk()frame = Frame(root)root.rowconfigure(0, weight=1)root.columnconfigure(0, weight=1)frame.grid(row=0, column=0, sticky="news")grid = Frame(frame)grid.grid(sticky="news", column=0, row=7, columnspan=2)frame.rowconfigure(7, weight=1)frame.columnconfigure(0, weight=1)#example valuesfor x in range(10):    for y in range(5):        btn = Button(frame)        btn.grid(column=x, row=y, sticky="news")frame.columnconfigure(tuple(range(10)), weight=1)frame.rowconfigure(tuple(range(5)), weight=1)root.mainloop()


@Vaughn Cato gave an excellent answer here. However, he has accidentally included a bunch of extraneous code in his example. Here is a cleaned up and more organized full example doing exactly what his example does.

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 framefor 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()

Screenshots:

When it first opens (small):

enter image description here

After you maximize the window:

enter image description here


To make the buttons expand when the window is maximized, try to modify the button.grid entry as follows:

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