Первая часть проблемы заключается в том, что вы не настроили приложение для заполнения окна, поэтому что-либо внутри приложения не заполнит окно.
Вы, похоже, пытаетесь это сделать, но вы указываете весь вес в окне root на строку и столбец 1, но вы помещаете app
в строку и столбец 0. Вам нужно чтобы задать вес для строки и столбца 0:
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
Примечание: если у вас есть только один виджет в контейнере, проще использовать pack, так как вы можете настроить его так, чтобы заполнить окно только одной строкой код, а не три.
Например:
self.pack(fill="both", expand=True)
... против
self.grid(sticky = N+E+S+W)
root.grid_rowconfigure(1, weight=1)
root.grid_columnconfigure(0, weight=1)
Следующая проблема заключается в том, что вы помещаете виджеты в кадр Application
с grid
, но вы не указали вес ни одной строки или столбца в кадре Application
. Итак, еще раз, этот фрейм не будет заполнять своего родителя, поэтому любой виджет внутри не будет заполнять окно тоже.
Я думаю, вы хотите, чтобы столбец 0 получил все дополнительное пространство, но вы хотите, чтобы строка 1 быть строкой, которая получает дополнительный пробел, поскольку именно там self.designViewerWindow
.
Добавьте следующее к __init__
из Application
:
class Application(tk.Frame):
def __init__(self, master=None):
...
self.grid_rowconfigure(1, weight=1)
self.grid_columnconfigure(0, weight=1)
...
Существуют и другие проблемы, но это показывает общую проблему: вы неправильно настраиваете строки и столбцы для каждой группы виджетов. Как правило, для каждого виджета, у которого есть дочерние элементы, управляемые grid
, необходимо указать положительный вес по крайней мере для одной строки и одного столбца.
Все это будет немного легче увидеть, если вы сгруппировали все вызовы на grid
для детей одного и того же виджета, а затем добавили команды rowconfigure
и columnconfigure
в том же месте. Таким образом, вы можете сразу увидеть все параметры сетки для каждой группы.