Проекты Python Tkinter [Пошаговое объяснение]

Опубликовано: 2020-09-14

Изучение графического интерфейса в Python может быть довольно сложным. Не волнуйтесь, потому что мы получили вашу спину! В этой статье мы поделились учебным пособием по Tkinter, чтобы вы могли эффективно работать с проектами Python с графическим интерфейсом. После завершения этого руководства вы познакомитесь со строительными блоками для создания проектов Python Tkinter. Если вы хотите получить больше знаний о python, ознакомьтесь с нашими программами по науке о данных.

Мы также поделились кодом для каждого шага. Однако мы рекомендуем вам копировать и вставлять его только тогда, когда вы понимаете, как он работает. В противном случае толку от него было бы мало.

Оглавление

Что такое Ткинтер?

Tkinter — это пакет для Python, позволяющий использовать инструментарий Tk GUI. Вы можете использовать Tkinter для создания программ с графическим интерфейсом через Python. Хотя Tkinter может создавать множество программ, вам может понадобиться использовать модули для расширенных реализаций. Вы должны быть знакомы с основами Tkinter, прежде чем работать над проектами Python Tkinter:

Программа Hello World в Tkinter

Вот пример программы hello world в Tkinter:

импортировать tkinter как tk

Приложение класса (tk.Frame):

def __init__(я, мастер=Нет):

супер().__init__(мастер)

сам.мастер = мастер

self.pack()

self.create_widgets()

определение create_widgets (я):

self.hi_there = tk.Button(я)

self.hi_there["текст"] = "Привет, мир\n(нажмите на меня)"

self.hi_there["команда"] = self.say_hi

self.hi_there.pack (сторона = «верх»)

self.quit = tk.Button(self, text="ВЫЙТИ", fg="красный",

команда = self.master.destroy)

self.quit.pack (сторона = «дно»)

def say_hi (я):

print("Привет всем!")

корень = tk.Tk()

приложение = приложение (мастер = корень)

приложение.mainloop()

Менеджеры геометрии в Tkinter

Еще одна основная концепция, о которой вы должны знать при работе над проектами Python Tkinter, — это менеджеры геометрии. Без использования менеджера геометрии ваши виджеты не появлялись бы на экране. Существует три основных способа добавления менеджера геометрии:

Сетка

Он добавляет сетку к родителю и позволяет отображать виджеты соответствующим образом. В сетке есть строки и столбцы для измерения длины и высоты виджетов.

Пакет

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

Место

Этот метод размещает виджеты в определенном месте в соответствии с родительским виджетом.

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

Оформить заказ: 42 захватывающих идеи и темы проектов Python для начинающих

Создание графического интерфейса на Python (учебник по Tkinter)

Шаг №1: Импорт модуля

Чтобы начать работу над приложением, нам сначала нужно импортировать необходимый модуль. Вы можете сделать это, импортировав модуль в свое пространство имен. Это позволит вам использовать константы и классы по их именам, а не уточнять их. Это означает, что вы можете использовать «Label», используя его имя вместо того, чтобы квалифицировать его как «TkinterLabel». Это сделало бы вещи относительно простыми, и вы могли бы сэкономить много времени, поскольку квалификация каждого класса и константы может быть очень громоздкой. Используйте следующий код для импорта модуля:

>>> из импорта Tkinter *

Если Python не связан с Tk (или Tcl) в вашей системе или если в вашей системе не установлен Tk (или Tcl), вы увидите сообщение об ошибке в этом разделе. Чтобы решить эту проблему, вам потребуется системный администратор для доступа. Убедитесь, что вы решаете эту проблему, делая то же самое.

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

>>> выигрыш = Тк()

Мы присвоили нашему окну переменную «win». После реализации приведенного выше кода вы увидите небольшое окно на экране. В строке заголовка должно быть написано «tk».

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

Шаг № 2: Добавление кнопок

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

>>> b1 = Кнопка (выигрыш, текст = «Один»)

>>> b2 = Кнопка (выигрыш, текст = «Два»)

Окно, которое мы создали в предыдущем разделе, является родительским для кнопок, которые мы создали сейчас. По мере того, как вы будете работать над другими проектами Python Tkinter, вы обнаружите, что фреймы также могут выступать в качестве родителей для других классов. Теперь, когда вы реализуете этот код, вы заметите странное явление — кнопки не отображаются в окне!

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

Шаг № 3: Внедрение менеджера пакетов

Мы будем использовать метод pack, чтобы добавить наши кнопки в родительский виджет. С помощью менеджера пакетов вы можете указать, с какой стороны родительского виджета вы хотите, чтобы ваш дочерний виджет был упакован. Вы можете использовать TOP, RIGHT, BOTTOM, LEFT в качестве своих функций. Программа выбирает TOP по умолчанию, если вы не укажете сторону. Давайте сначала добавим менеджер пакетов:

>>> b1.pack()

>>> b2.pack()

Когда вы добавите первую кнопку (первая строка кода), вы заметите, что ваше окно сжимается до размера кнопки. Точно так же, когда вы добавляете вторую кнопку (вторая строка кода), окно расширяется в соответствии с размером этой кнопки. Окно разместило кнопки в вертикальном порядке, потому что мы не указали, с какой стороны они должны располагаться. Давайте упакуем их слева, используя код ниже:

>>> b2.pack(сторона=ЛЕВО)

>>> b1.pack(сторона=ЛЕВО)

Обратите внимание, что мы используем менеджер пакетов в основном, когда нам нужно разместить наши виджеты только в этих двух порядках (горизонтальном и вертикальном). Для других типов размещения виджетов мы используем метод сетки или метод размещения. Вы можете добавить пространство между кнопками и окном, используя функции «padx» или «pady». Функция padx добавляет отступы по оси X (слева и справа) виджета, а функция pady добавляет отступы по оси Y (сверху и снизу) устройства.

>>> b1.pack(сторона=LEFT, padx=10)

>>> b2.pack(сторона=LEFT, padx=10)

Мы рекомендуем поэкспериментировать с отступами виджетов. Это поможет вам понять различные способы изменения размещения виджетов. Отступы — сложная концепция для освоения, поэтому было бы лучше попробовать ее, прежде чем переходить к следующему разделу.

Шаг № 4: Диспетчер сетки

Еще одним популярным менеджером геометрии в Tkinter является менеджер сетки. Как мы уже обсуждали ранее в нашей статье, менеджер сетки позволяет разделить родителя на строки и столбцы. Вы можете разместить дочерние виджеты в ячейках родительской сетки. Вы можете изменить ширину и длину каждого столбца и строки в соответствии с вашими требованиями. Не все столбцы должны быть одинаковой ширины. Точно так же не обязательно, чтобы каждая строка имела одинаковую высоту. Таким образом, менеджер сетки дает вам больше творческой свободы с точки зрения редактирования внешнего вида и размещения ваших виджетов.

Мы создадим новое окно с теми же кнопками, что и раньше, чтобы протестировать менеджер сетки. Однако мы добавим кнопки в сетку 2×2:

>>> выигрыш = Тк()

>>> b1 = Кнопка (выигрыш, текст = «Один»)

>>> b2 = Кнопка (выигрыш, текст = «Два»)

>>> b1.grid(строка=0, столбец=0)

>>> b2.grid(строка=1, столбец=1)

Вы заметите, что наша программа оставила некоторые ячейки пустыми. Это потому, что мы ничего не добавили в строку 0, столбец 1 (или строку 1 и столбец 0). Мы попробуем новый виджет, чтобы увидеть что-то интересное:

>>> l = Label(win, text="Это метка")

>>> l.grid(строка=1, столбец=0)

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

Рекомендуем прочитать: Зарплата разработчиков Django в Индии

Шаг № 5: Улучшение макета

В этом разделе мы попробуем новый виджет под названием frame. Фрейм предназначен только для размещения других виджетов. Вы можете упаковать несколько виджетов в рамку или использовать сетку, чтобы разместить их там же. Вы также можете упаковать разные кадры в один кадр. Эта функция позволяет вам создавать расширенные макеты для вашей программы с графическим интерфейсом. Например, мы добавим в кадр три кнопки подряд. Добавьте кнопки горизонтально, а затем упакуйте этикетку вертикально с рамкой:

>>> выигрыш = Тк()

>>> f = кадр (победа)

>>> b1 = Кнопка(f, «Один»)

>>> b2 = Кнопка(f, «Два»)

>>> b3 = Кнопка (f, «Три»)

>>> b1.pack(сторона=ЛЕВО)

>>> b2.pack(сторона=ЛЕВО)

>>> b3.pack(сторона=ЛЕВО)

>>> l = Label(win, «Эта метка находится над всеми кнопками»)

>>> л.пак()

>>> f.pack()

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

С функцией сетки вы можете использовать параметр «липкий», который позволяет вам использовать координаты карты (юг, север, запад, юго-запад, северо-восток и т. д.) для указания размещения виджетов. Прежде чем мы перейдем к следующему разделу, убедитесь, что вы понимаете функции, которые мы уже обсуждали. Протестируйте работу сетки и фрейма вместе, чтобы увидеть, как вы можете использовать их в других проектах Python с графическим интерфейсом.

Шаг № 6: Сделайте кнопки полезными

Если бы вы щелкнули кнопки, которые мы создали до сих пор, вы, должно быть, заметили, что они не реагируют (они ничего не делают). Они нажимаются при нажатии и выделяются при наведении курсора на них, но не выполняют никаких функций. Чтобы наши кнопки выполняли определенные функции, нам нужно использовать функцию «настроить».

Мы можем передать любой аргумент ключевого слова в метод «configure» виджета, чтобы передать его при его создании. Вот пример:

>>> b1.configure(текст=”Уно”)

Параметр «команда» связывает кнопки с функциями обратного вызова, когда вы их создаете или добавляете к ним «настроить». Чтобы понять, как это работает, мы создадим функцию, которая выводит сообщение:

>>> по умолчанию бут1():

… print("Кнопка номер один была нажата")

>>> b1.configure(команда=but1)

Поэтому, когда вы нажимаете соответствующую кнопку, она печатает сообщение.

Шаг № 7: Добавление виджетов входа

Виджеты ввода позволяют пользователям вводить текст в программу. Однако нам нужно было бы сделать виджет входа функциональным, как мы сделали с кнопками. Виджет ввода должен извлекать (и устанавливать) текст. Чтобы виджет ввода выполнял эту функцию, вам нужно использовать объект Tkinter «StringVar». Объект StringVar содержит текст в виде строки и делает его доступным для чтения через get.

Мы создадим новое окно для тестирования наших виджетов входа:

>>> выигрыш = Тк()

>>> v = StringVar()

>>> e = Вход (выигрыш, textvariable = v)

>>> e.pack()

Давайте теперь добавим «это тест» в качестве записи и получим то же самое через StringVar:

>>> v.получить()

"это проверка"

Теперь вы можете установить текст в StringVar и сделать так, чтобы он отображался в виджете:

>>> v.set("это установлено из программы")

Дополнительный виджет: виджет списка

Помимо виджета ввода, мы можем добавить виджет списка. Виджет списка позволяет пользователю выбирать элемент из меню. Мы создадим новое окно, чтобы попробовать виджет списка:

>>> выигрыш = Тк()

>>> фунт = список (победа, высота = 3)

>>> lb.pack()

>>> lb.insert(END, «первая запись»)

>>> lb.insert(END, «вторая запись»)

>>> lb.insert(END, «третья запись»)

>>> lb.insert(END, «четвертая запись»)

Вы можете вставлять элементы в начало, середину и конец списка. Вы также можете удалить их. Если в списке слишком много элементов, вы можете добавить полосу прокрутки:

>>> sb = полоса прокрутки (выигрыш, ориентация = ВЕРТИКАЛЬНАЯ)

>>> sb.pack(side=LEFT, fill=Y)

Чтобы сделать нашу полосу прокрутки функциональной, нам нужно использовать функции обратного вызова:

>>> sb.configure(command=lb.yview)

>>> lb.configure(yscrollcommand=sb.set)

Метод curselection возвращает вам элемент, когда вы выбираете его в списке. Он вернет пустой кортеж, если вы не выберете какие-либо элементы.

Шаг № 8: Заключительные шаги

Мы будем использовать все, что мы изучили в нашем руководстве по Tkinter, чтобы создать редактор списка телефонов:

Общий код

#!/usr/bin/env python3

из импорта tkinter *

импорт с телефонов *

определение, которое_выбрано():

print("В {0}".format(select.curselection()))

вернуть целое число (выбрать.curselection () [0])

определение add_entry():

phonelist.append([fnamevar.get(), lnamevar.get(), phonevar.get()])

set_select()

защита update_entry():

список телефонов[который_выбрано()] = [fnamevar.get(),

lnamevar.get(),

phonevar.get()]

деф delete_entry():

список телефонов[который_выбрано()]

set_select()

защита load_entry():

fname, lname, phone = phonelist[what_selected()]

fnamevar.set(fname)

lnamevar.set(lname)

phonevar.set(телефон)

определение make_window():

global fnamevar, lnamevar, phonevar, select

выигрыш = Тк()

frame1 = кадр (победа)

кадр1.pack()

Метка (кадр1, текст = «Имя»). сетка (строка = 0, столбец = 0, липкий = W)

fnamevar = StringVar()

fname = Entry (frame1, textvariable = fnamevar)

fname.grid(строка=0, столбец=1, липкий=W)

Метка (кадр1, текст = «Фамилия»). сетка (строка = 1, столбец = 0, липкий = W)

lnamevar = StringVar()

lname = запись (frame1, текстовая переменная = lnamevar)

lname.grid (строка = 1, столбец = 1, липкий = W)

Метка (кадр1, текст = «Телефон»). сетка (строка = 2, столбец = 0, липкая = W)

phonevar = StringVar()

phone = Entry (frame1, textvariable = phonevar)

phone.grid (строка = 2, столбец = 1, липкий = W)

frame2 = Frame(win) # Ряд кнопок

кадр2.pack()

b1 = Кнопка (frame2, text="Добавить", command=add_entry)

b2 = Кнопка (frame2, text="Обновить", command=update_entry)

b3 = Кнопка (frame2, text="Удалить", command=delete_entry)

b4 = Кнопка (frame2, текст = «Загрузить», команда = load_entry)

b5 = Кнопка (кадр2, текст = «Обновить», команда = set_select)

b1.pack(сторона=ЛЕВАЯ)

b2.pack(сторона=ЛЕВАЯ)

b3.pack(сторона=ЛЕВАЯ)

b4.pack(сторона=ЛЕВАЯ)

b5.pack(сторона=ЛЕВАЯ)

frame3 = Frame(win) # выбор имен

кадр3.пак()

прокрутка = полоса прокрутки (frame3, ориентация = ВЕРТИКАЛЬНАЯ)

select = Listbox(frame3, yscrollcommand=scroll.set, height=6)

scroll.config (команда = select.yview)

scroll.pack(сторона=ПРАВО, заполнение=Y)

select.pack(сторона=ЛЕВО, заполнение=ОБА, расширение=1)

ответная победа

защита set_select():

phonelist.sort (ключ = лямбда-запись: запись [1])

select.delete(0, КОНЕЦ)

для fname, lname, phone в телефонном списке:

select.insert(END, "{0}, {1}".format(lname, fname))

выиграть = make_window ()

set_select()

win.mainloop()

Вот список телефонов:

phonelist = [['Крис', 'Мейерс', '241-343-4349'],

['Роберт', 'Смит', '202-689-1234'],

['Джанет', 'Джонс', '609-483-5432'],

['Ральф', 'Барнхарт', '215-683-2341'],

['Эрик', 'Нельсон', '571-485-2689'],

['Форд', 'Префект', '703-987-6543'],

['Мэри', 'Зиглер', '812-567-8901'],

['Боб', 'Смит', '856-689-1234']]

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

Обязательно прочтите: Цепь Маркова в учебнике по Python

Узнайте больше о Python и проектах с графическим интерфейсом Python

Работа над проектами Python Tkinter может быть довольно увлекательной, если вы знаете, что делаете. Они также являются отличным способом понять свои сильные (и слабые) стороны. Вы можете узнать больше о Python; рекомендуем посетить наш блог. Вот некоторые ресурсы для дальнейшего чтения:

  • 10 проектов Python с графическим интерфейсом
  • Как сделать чат-бота на Python
  • 42 идеи проекта Python

Что вы думаете об этом проекте? Вы работали над другими проектами Python Tkinter? Дайте нам знать.

Если вам интересно узнать о науке о данных, ознакомьтесь с программой IIIT-B & upGrad Executive PG по науке о данных, которая создана для работающих профессионалов и предлагает более 10 тематических исследований и проектов, практические семинары, наставничество с отраслевыми экспертами, 1 -на-1 с отраслевыми наставниками, более 400 часов обучения и помощи в трудоустройстве в ведущих фирмах.

Подходит ли Python для создания графических пользовательских интерфейсов?

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

Tkinter или KIVY: что лучше использовать?

Kivy — это бесплатная среда Python с открытым исходным кодом для создания или разработки уникальных, но привлекательных программ пользовательского интерфейса. Если вы разработчик Python, которому нравится создавать приложения, KIVY — отличный выбор для создания более динамичных приложений. Tkinter — наиболее широко используемый интерфейс Python для быстрой и простой разработки приложений с графическим интерфейсом. Если вы новичок в Python и хотите научиться создавать компьютерные интерфейсы, начните с Tkinter и изучите основы.