Вообще говоря, диспетчер геометрии grid
не позволяет вам установить максимальный размер столбца. Это разработано, чтобы сжаться или расти, чтобы точно соответствовать его содержанию.
Одним из решений является использование рамок для столбцов, затем вы можете настроить рамку так, чтобы она оставалась определенной ширины. Основным недостатком этого решения является то, что у вас больше нет сетки как таковой - у вас есть ряд столбцов. Если элементы в столбцах имеют разную высоту, очень сложно выстроить ряды в ряд.
Более простое решение - убедиться, что предпочтительная ширина всех виджетов меньше требуемого размера столбца. Затем вы можете установить размер столбца и развернуть виджеты для заполнения. Когда вы сделаете это, они будут расширяться только до размера столбца, а не до их максимального размера.
Вот простой пример с двумя столбцами, где второй столбец ограничен до 100 пикселей. Это делается путем установки minsize
столбца и weight
нуля, а затем создания виджета метки, который меньше minsize
. При установке виджета по бокам столбца он будет иметь ширину 100 пикселей.
import tkinter as tk
root = tk.Tk()
root.geometry("300x100")
# We want to constrain the column to 100 pixels, so we
# set a minsize and a weight of zero so that it will
# not grow any larger.
root.columnconfigure(1, minsize=100, weight=0)
# Add two labels. For the label in the second column we will
# force its size to be as small as possible. Later, we will
# configure it to grow to fill its column
label1 = tk.Label(root, text="This is a wide label", background="pink")
label2 = tk.Label(root, anchor="w", width=1, text="This is also a wide label", background="bisque")
# Add the labels, and configure them to fill their columns
label1.grid(row=0, column=0, sticky="nsew")
label2.grid(row=0, column=1, sticky="nsew")
root.mainloop()
