Чтобы размер виджета соответствовал размеру основного виджета или окна, вы должны указать, как это сделать с columnconfigure()
и rowconfigure()
.Затем необходимо развернуть виджет, чтобы заполнить доступное пространство ячейки, указав grid()
придерживаться краев;sticky='nsew'
.Смотрите мой пример:
import tkinter as tk
class Game(tk.Tk):
def __init__(self, *args, **kwargs):
super().__init__(*args,**kwargs)
self.geometry('800x600')
self.columnconfigure(0, weight=1) # Specify how columns and rows will
self.rowconfigure(0, weight=1) # change when window size changes.
# The game's output Text() widget
self.story_text_field = tk.Text(self)
self.story_text_field.grid(row=0, column=0, sticky='nsew',
pady=10, padx=10) # Sticky expands the widget to fill the cell
# The player input Entry() widget
self.player_input_field = tk.Entry(self)
self.player_input_field.grid(row=1, column=0, pady=(0,10))
Game().mainloop()
Я удалил Рамки, чтобы сделать конструкцию более понятной.Также я убрал раскраску виджетов.Я ввел некоторые отступы, чтобы сделать результат более приятным для глаз, и изменил размер окна, чтобы его было легче обрабатывать на крошечном экране.
Для получения дополнительной информации о grid()
Я могу порекомендовать effbot's Tkinter Grid Geometry Manager .Вы также можете прочитать Mike - ответ SMT на Найти позицию другого якоря, отличного от уже используемого якоря , который касается как grid()
, так и pack()
.