Рубрики
Без рубрики

Пример сетки Python – Tkinter

Привет всем! В нашем предыдущем разделе учебника по Tkinter мы рассмотрели текстовый виджет Tkinter. Давайте теперь рассмотрим пример использования диспетчера сетки Tkinter.

Автор оригинала: Pankaj Kumar.

Привет всем! В нашем предыдущем разделе учебника по Tkinter мы рассмотрели текстовый виджет Tkinter . Давайте теперь рассмотрим пример использования диспетчера сетки Tkinter.

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

Зачем использовать Tkinter Grid Manager?

В наших предыдущих уроках мы использовали pack geometry manager для управления геометрией нашего приложения. Но заставить его работать плавно с большим количеством объектов-сложная задача.

Поэтому Tkinter представила других менеджеров по упаковке, чтобы сделать нашу жизнь немного проще, а также иметь некоторую гибкость в том, когда и что использовать.

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

Теперь, когда мы рассмотрели это, давайте перейдем к фактическому использованию диспетчера сетки в нашем приложении!

ПРИМЕЧАНИЕ : Никогда не используйте несколько менеджеров упаковки в одном приложении Tkinter. Это приведет к непреднамеренным ошибкам и вообще не рекомендуется. Используйте только один менеджер упаковки для одного приложения.

Использование диспетчера геометрии сетки Tkinter

Давайте разработаем нижеприведенный макет с помощью диспетчера сетки.

Расположение

Этот макет будет иметь два виджета ввода , с меткой для каждого, и виджет кнопки ниже.

Мы также добавим изображение справа и виджет кнопки для изображения.

В то время как этим типом макета трудно управлять с помощью pack , мы можем легко сделать это с помощью grid !

Шаги достаточно просты. Нам просто нужно создать все необходимые виджеты и сообщить менеджеру grid , как их разместить.

Сначала мы создадим наш главный объект.

import tkinter as tk

master = tk.Tk()

Теперь давайте сначала создадим две метки, так как они нужны нам с самой левой стороны, и скажем менеджеру grid разместить их на соответствующем номере строки.

Нам нужны метки с номером столбца 0, индексированные номерами строк 0 и 1. После создания меток мы можем напрямую упаковать их с помощью grid с помощью:

label_object.grid(row, col)

Таким образом, мы можем напрямую записать его следующим образом:

tk.Label(master, text="Label 1").grid(row=0, column=0)
tk.Label(master, text="Label 2").grid(row=1, column=0)

Теперь давайте добавим запись для каждой из двух меток.

e1 = tk.Entry(master)
e2 = tk.Entry(master)

Мы создали объекты ввода, но теперь нам нужно указать grid , чтобы поместить их в соответствующее положение.

Просто вызовите entry_obj.grid() ! Это похоже на пакет, но в целом гораздо более плавно в использовании.

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

После этого мы можем добавить наш основной цикл tkinter, используя tk.mainloop() .

Я опубликую полный код до этого момента.

import tkinter as tk

# Create the master object
master = tk.Tk()

# Create the label objects and pack them using grid
tk.Label(master, text="Label 1").grid(row=0, column=0)
tk.Label(master, text="Label 2").grid(row=1, column=0)

# Create the entry objects using master
e1 = tk.Entry(master)
e2 = tk.Entry(master)

# Pack them using grid
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

# The mainloop
tk.mainloop()

Выход

Образец сетки Tkinter

Хорошо! Похоже, это работает, как и ожидалось. Теперь давайте добавим к нему кнопку, прямо ниже!

button1 = tk.Button(master, text="Button 1")
button1.grid(columnspan=2, row=2, column=0)

Теперь мы прикрыли нашу левую сторону.

Давайте добавим изображение и еще одну кнопку с правой стороны.

Как мы обсуждали вопросы отображения изображения в нашем предыдущем уроке , мы должны держать ссылку на Фотоизображение объект, чтобы избежать автоматической сборки мусора!

from PIL import Image, ImageTk

# Create the PIL image object
image = Image.open("debian.png")
photo = ImageTk.PhotoImage(image)

# Create an image label
img_label = tk.Label(image=photo)
# Store a reference to a PhotoImage object, to avoid it
# being garbage collected! This is necesary to display the image!
img_label.image = photo

img_label.grid(row=0, column=2)

Наконец, давайте добавим кнопку внизу.

# Create another button
button2 = tk.Button(master, text="Button 2")
button2.grid(columnspan=2, row=2, column=2)

Теперь я опубликую полную программу здесь.

import tkinter as tk
from PIL import Image, ImageTk

# Create the master object
master = tk.Tk()

# Create the label objects and pack them using grid
tk.Label(master, text="Label 1").grid(row=0, column=0)
tk.Label(master, text="Label 2").grid(row=1, column=0)

# Create the entry objects using master
e1 = tk.Entry(master)
e2 = tk.Entry(master)

# Pack them using grid
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

button1 = tk.Button(master, text="Button 1")
button1.grid(columnspan=2, row=2, column=0)

# Create the PIL image object
image = Image.open("debian.png")
photo = ImageTk.PhotoImage(image)

# Create an image label
img_label = tk.Label(image=photo)
# Store a reference to a PhotoImage object, to avoid it
# being garbage collected! This is necesary to display the image!
img_label.image = photo

img_label.grid(row=0, column=2)

# Create another button
button2 = tk.Button(master, text="Button 2")
button2.grid(columnspan=2, row=2, column=2)

# The mainloop
tk.mainloop()

Выход

Полная компоновка сетки Tkinter

Наконец-то мы закончили наш макет! И это было так же просто, как просто создать виджеты и сказать grid , чтобы разместить их в правильном положении!

Вывод

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

Оставайтесь с нами, чтобы узнать больше контента Tkinter!