Ответ 1
От effbot:
Параметр заполнить сообщает менеджеру, что виджет хочет заполнить все пространство, назначенное ему. Значение управляет тем, как заполнить пробел; ОБА означает, что виджет должен расширяться как по горизонтали, так и по вертикали, X означает, что он должен расширяться только горизонтально, а Y означает, что он должен расширяться только в вертикальном положении.
Опция expand сообщает менеджеру назначить дополнительное пространство для окна виджетов. Если родительский виджет становится больше необходимого для хранения всех упакованных виджетов, любое превышение пространства будет распределено между всеми виджетами, у которых параметр expand установлен на ненулевое значение.
Итак, fill
сообщает, что виджет будет расти до тех пор, пока в указанном направлении не будет достаточно места, expand
сообщает мастеру взять любое пространство, которое не назначено ни одному виджету, и распространяет его на все виджеты, которые имеют отличное от нуля значение expand
.
Различие становится понятным при запуске этого примера:
import Tkinter as tk
root = tk.Tk()
root.geometry('200x200+200+200')
tk.Label(root, text='Label', bg='green').pack(expand=1, fill=tk.Y)
tk.Label(root, text='Label2', bg='red').pack(fill=tk.BOTH)
root.mainloop()
Вы можете видеть, что метка с expand=1
получает столько свободного места, сколько доступно для нее, но только занимает ее в указанном направлении, Y.
Метка с fill=tk.BOTH
расширяется в обоих направлениях, но имеет меньшее пространство.