Я хочу исключить странное дополнительное пространство, которое, по-видимому, не поддается изменению размера в моем макете при использовании только grid()
, но вызов pack()
иногда ухудшает ситуацию: GUI просто исчезает полностью!
Я прочитал несколько откровенных ответов на макеты от @Bryan Oakley, таких как:
Когда использовать макеты пакетов или сетки в tkinter?
и
Tkinter: сетка или пакет внутри сетки?
но когда я начинаю писать свои собственные вещи, у меня все еще часто возникают проблемы.
Мое понимание:
- У меня должна быть рамка для заполнения
root window
, иначе не было бы надежды заполнить дополнительное пространство в окне, однако я настраиваю только виджеты. - Для всехдочерние виджеты, находящиеся внутри общего родителя
Frame
, я должен использовать либо pack()
, либо grid()
, но не оба. - При использовании
grid()
в кадре обязательно указывать Frame.grid_rowconfigure()
и .grid_columnconfigure()
с ненулевыми weight
аргументами.В противном случае ничего бы не появилось. - Таким образом, можно получить основной
Frame
, используя pack()
, но его непосредственный дочерний элемент Frames
, все используя grid()
;Внутри каждого из этих дочерних Frames
в сетке мы могли бы pack()
их собственные дочерние виджеты.Другими словами, мы могли бы чередовать grid()
и pack()
по «регионам» или уровням иерархии контейнера, но никогда не смешивать их в одном и том же контейнере: единственное ограничение. - При тщательном расчете веса я могзаполните горизонтальное пространство в родительском элементе
Frame
дочерним элементом Frame
, заполненным горизонтальными элементами, например, все виджеты используют grid(sticky='nsew')
, а дочерний элемент Frame
использует pack(side='top', fill='both', expand=True)
.
Если мое понимание было правильным, то я никогда не мог понять, почему №5 не мог работать для меня, например, всегда есть неиспользуемое дополнительное пространство к правому концу моего горизонтального ребенка Frame
внутри основного Frame
изкорневое окно.
ОБНОВЛЕНИЕ 2
Я понял это.# 5 не работал для меня, потому что я забыл указать .grid_columnconfigure(0, weight=1)
в основном Frame
перед использованием grid()
.Виноват!Дело закрыто.
ОБНОВЛЕНИЕ
Я нахожусь на macOS High Sierra, работаю на python 3.6.4 Homebrew.