Так как tkinter по умолчанию заставит фрейм изменить размер виджетов, даже если вы дадите ему размер, как только вы поместите виджет в фрейм, он изменит размер на виджет.Вместо этого нам нужно указать tkinter, чтобы он не разрешал распространение.Поэтому, если мы отключим распространение внутри фрейма, в котором находится кнопка, он больше не будет изменять размер, чтобы соответствовать кнопке.
В случае проблемы с расширением вправо при изменении размера это связано с весами в столбце 1.и 2. Если вы не планируете добавлять что-либо в эти столбцы, вам необходимо удалить весовые коэффициенты для этих столбцов.
Поскольку вы добавляете вес для всех 3 столбцов, размер столбцов в контейнере будет изменяться с одинаковой скоростью.В этом случае, поскольку столбцы 1 и 2 начинаются с нулевого размера, когда вы начинаете изменять размер окна, вы заметите, что столбец 0 изменяет размеры, но недостаточно быстро, чтобы заполнить окно.Это связано с тем, что столбцы 1 и 2 также растут с той же скоростью, что и столбец 0, из-за устанавливаемых весов.
Поэтому, чтобы ответить на ваш комментарий, вы можете сохранить веса для столбцов 1 и 2, если вы планируете использоватьэти столбцы позже, и вы хотите, чтобы эти столбцы также росли вместе с экраном.
Попробуйте этот код и дайте мне знать, если у вас есть какие-либо вопросы.
import tkinter as tk
def main():
main_win = tk.Tk()
main_win.title('just playing around')
main_win.geometry('350x450')
# main_win.rowconfigure(0, weight=1) # disable this
main_win.rowconfigure(1, weight=1)
main_win.columnconfigure(0, weight=1)
# main_win.columnconfigure(1, weight=1) # disable this
# main_win.columnconfigure(2, weight=1) # disable this
frm1 = tk.Frame(main_win, bg='red', height=100, width=350)
frm1.grid(row=0, column=0, sticky='nsew')
frm1.grid_propagate(False) # add grid_propagate(False) after your grid placement.
frm1.rowconfigure(0, weight=1)
frm1.rowconfigure(1, weight=1)
frm1.rowconfigure(2, weight=1)
frm1.columnconfigure(0, weight=1)
frm2 = tk.Frame(main_win, bg='green', height=150, width=350)
frm2.grid(row=1, column=0, sticky='nsew')
frm2.rowconfigure(0, weight=1)
frm2.rowconfigure(1, weight=1)
frm2.rowconfigure(2, weight=1)
frm2.columnconfigure(0, weight=1)
quit_btn = tk.Button(frm1, bg='lightgrey', text='Quit', command=main_win.destroy)
quit_btn.grid(row=1)
main_win.mainloop()
if __name__ == '__main__':
main()
Результаты:
Как вы можете видеть, я могу изменить размер нижней рамки без изменения размера верхней рамки по вертикали, и теперь обе рамки расширяются по горизонтали.
