На этом шаге мы рассмотрим пример создания и использования вложенных контейнеров.
Мы можем использовать для размещения компонентов сразу несколько контейнеров, вложив их друг в друга (вложенные контейнеры). Это может пригодиться, если требуется создать окно со сложным интерфейсом. Контейнеры помещаются в другие контейнеры таким же образом, как и обычные компоненты.
Есть два способа задать контейнер, в который должен быть помещен тот или иной компонент:
Ниже приведен пример приложения, выводящего окно с надписью, полем ввода и кнопками ОК и Отмена. Надпись и поле ввода будут находиться слева, друг над другом, а кнопки - справа, также друг над другом.
import tkinter import tkinter.ttk class Application(tkinter.ttk.Frame): def __init__(self, master=None): super().__init__(master) self.pack(padx=4, pady=4) self.create_widgets() self.master.title("Вложенные контейнеры") self.master.resizable(False, False) def create_widgets(self): # Создаем первый вложенный контейнер - для надписи и поля ввода cont1 = tkinter.ttk.Frame(self) # Создаем надпись (компонент Label). Опция text указывает текст # для надписи. Размещаем его первым способом - задав нужный # контейнер в первом параметре конструктора lblValue = tkinter.ttk.Label(cont1, text="Введите значение") lblValue.pack(padx=4, pady=4) # Создаем поле ввода и также размещаем ее на экране первым # способом entValue = tkinter.ttk.Entry(cont1) entValue.pack(padx=4, pady=4) # Выводим на экран первый вложенный контейнер cont1.pack(side="left") # Создаем второй вложенный контейнер - для кнопок cont2 = tkinter.ttk.Frame(self) # Создаем кнопки. Выводим их на экран вторым способом - задав # нужный контейнер в параметре in_ метода раск() btnOK = tkinter.ttk.Button(self, text="OK") btnOK.pack(in_=cont2, padx=4, pady=4) btnCancel = tkinter.ttk.Button(self, text="Отмена") btnCancel.pack(in_=cont2, padx=4, pady=4) # Выводим на экран второй вложенный контейнер cont2.pack(side="right") root = tkinter.Tk() app = Application(master=root) root.mainloop()
Результат работы приложения приведен на рисунке 1.
Рис.1. Результат работы приложения
Глубина вложения контейнеров друг в друга не ограничена. Помимо этого, в разных вложенных контейнерах мы можем использовать разные диспетчеры компоновки.
На следующем шаге мы рассмотрим размещение компонентов непосредственно в окне.