Шаг 17.
Библиотека Tkinter. Размещение компонентов в контейнерах. Диспетчеры компоновки. Использование вложенных контейнеров

    На этом шаге мы рассмотрим пример создания и использования вложенных контейнеров.

    Мы можем использовать для размещения компонентов сразу несколько контейнеров, вложив их друг в друга (вложенные контейнеры). Это может пригодиться, если требуется создать окно со сложным интерфейсом. Контейнеры помещаются в другие контейнеры таким же образом, как и обычные компоненты.

    Есть два способа задать контейнер, в который должен быть помещен тот или иной компонент:

    Ниже приведен пример приложения, выводящего окно с надписью, полем ввода и кнопками ОК и Отмена. Надпись и поле ввода будут находиться слева, друг над другом, а кнопки - справа, также друг над другом.

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. Результат работы приложения

    Глубина вложения контейнеров друг в друга не ограничена. Помимо этого, в разных вложенных контейнерах мы можем использовать разные диспетчеры компоновки.

    На следующем шаге мы рассмотрим размещение компонентов непосредственно в окне.




Предыдущий шаг Содержание Следующий шаг