Шаг 16.
Библиотека Tkinter. Размещение компонентов в контейнерах. Диспетчеры компоновки. Grid: выстраивание компонентов по сетке

    На этом шаге мы рассмотрим назначение, его параметры и пример использования.

    Диспетчер компоновки Grid размещает компоненты в ячейках воображаемой сетки, накладываемой на контейнер. Компонент также может занимать сразу несколько столбцов или строк такой сетки - это может пригодиться, если требуется вывести в контейнере очень большой элемент управления. Если в одной и той же ячейке окажутся несколько компонентов, они будут наложены друг на друга.

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

    Вывод компонентов посредством диспетчера компоновки Grid выполняется вызовом метода grid([<Параметры>]), поддерживаемого всеми компонентами. Вот параметры, которые мы можем использовать в этом методе:

    Для настройки параметров строк воображаемой сетки, по которой выстраиваются компоненты, применяется метод:

  grid_rowconfigure(<Номер строки>, <Параметры>)    ,
а для задания параметров столбцов - аналогичный метод:
  grid_columnconfigure(<Номер столбца>, <Параметры>)

    Оба этих метода поддерживаются всеми компонентами. Первым параметром в них указывается номер настраиваемой строки/столбца, а остальные доступные параметры таковы:

    Текст приведенного ниже примера содержит код приложения, аналогичного приложению, код которого был представлен на предыдущем шаге. Интерфейс этого приложения создан с применением диспетчера компоновки Grid. При любом изменении ширины окна поле ввода будет занимать 2/3 от его ширины, а кнопка Вывести значение - 1/3. Кнопка Выход же в любом случае будет находиться в правом нижнем углу окна.

import tkinter
import tkinter.ttk
class Application(tkinter.ttk.Frame):
      def __init__(self, master=None):
            super().__init__(master)

            self.pack(fill="both", padx=4, pady=4)
            self.create_widgets()
            self.master.title("Grid")

            # Указываем у окна возможность изменения только ширины
            self.master.resizable(True, False)

      def create_widgets(self):
            entValue = tkinter.ttk.Entry(self)

            entValue.grid(sticky="w, e")
            btnShow = tkinter.ttk.Button(self, text="Вывести значение")
            btnShow.grid(row=0, column=1, sticky="w, e")
            btnExit = tkinter.ttk.Button(self, text="Выход")
            btnExit.grid(column=1, sticky="e, s")
            self.grid_rowconfigure(1, pad=5)
            self.grid_columnconfigure(0, minsize=100, weight=2, pad=5)
            self.grid_columnconfigure(1, weight=1, pad=5)


root = tkinter.Tk()
app = Application(master=root)
root.mainloop()
Архив с файлом можно взять здесь.

    Результат работы приложения приведен на рисунке 1.


Рис.1. Результат работы приложения

    Осталось рассмотреть дополнительные методы, которые могут пригодиться при работе с диспетчером компоновки Grid и поддерживаются всеми компонентами:

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




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