Хотите ли вы разрешить пользователю изменять размер всего окна вашего приложения и распределять лишнее пространство между его внутренними виджетами? Для этого требуются некоторые операции, которые не так очевидны.
Необходимо использовать техники управления размерами строк и столбцов, описанные в настройках размеров столбцов и строк, чтобы сделать сетку вашего виджета Application растяжимой. Однако этого недостаточно.
Рассмотрим тривиальное приложение, которое содержит только кнопку Quit. Если вы запустите это приложение и измените размер окна, кнопка останется тем же размером и останется посередине окна.
Вот версия метода .createWidgets() в минимальном приложении. В этой версии кнопка Quit всегда занимает все доступное пространство.
def createWidgets(self):
top = self.winfo_toplevel() # №1
top.rowconfigure(0, weight=1) # №2
top.columnconfigure(0, weight=1) # №3
self.rowconfigure(0, weight=1) # №4
self.columnconfigure(0, weight=1) # №5
self.quit = Button(self, text='Quit', command=self.quit)
self.quit.grid(row=0, column=0, # №6
sticky=tk.N+tk.S+tk.E+tk.W)
| № | Описание |
|---|---|
| 1 | «Верхнее окно» - это самое внешнее окно на экране. Однако это окно не является вашим окном Application - это родительский элемент экземпляра Application. Чтобы получить верхнее окно, вызовите метод .winfo_toplevel() на любом виджете вашего приложения. |
| 2 | Эта строка делает строку 0 сетки верхнего окна растяжимой. |
| 3 | Эта строка делает столбец 0 сетки верхнего окна растяжимым. |
| 4 | Делает строку 0 сетки виджета Application растяжимой. |
| 5 | Делает столбец 0 сетки виджета Application растяжимым. |
| 6 | Аргумент sticky=tk.N+tk.S+tk.E+tk.W заставляет кнопку расширяться, чтобы заполнить свою ячейку сетки. |
Требуется еще одно изменение. В конструкторе измените вторую строку следующим образом:
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid(sticky=tk.N+tk.S+tk.E+tk.W)
self.createWidgets()
Аргумент sticky=tk.N+tk.S+tk.E+tk.W для self.grid() необходим, чтобы виджет Application расширялся, чтобы заполнить свою ячейку сетки верхнего уровня окна.