В этой части обучения Tkinter мы познакомим Вас с инструментом Tkinter и создадим первые программы. Целью этого руководства является ознакомление с базой инструментария Tkinter. Я использовал несколько иконок из набора Tango от Gnome project.
Содержание курса
- Создание окна по центру и кнопка выхода в Tkinter
- Разметка виджетов в Tkinter — pack, grid и place
- Виджеты Checkbutton, Label, Scale и Listbox в Tkinter
- Меню, подменю и панель инструментов в Tkinter
- Диалоговые окна в Tkinter
- Рисуем линии, прямоугольники, круг и текст в Tkinter
- Пишем игру змейка на Tkinter
Содержание статьи
- Tkinter библиотека для создания графических интерфейсов
- Язык программирования Python
- Создание обычного окна в Tkinter
- Расположение окна по центру экрана в Tkinter
- Создаем кнопку выхода из приложения в Tkinter
Tkinter библиотека для создания графических интерфейсов
Tkinter – это графическая библиотека на основе Tk, которая входит в стандартную библиотеку Python. Tk является библиотекой базовых элементов графического интерфейса для языка Tcl. Tkinter реализован как оболочка Python для Tcl интерпретатора, встроенного в интерпретатор Python. Существует и несколько других популярных графических инструментов для Python. Наиболее популярными являются wxPython, PyQt5 и PyGTK.
Язык программирования Python
Python – это высокоуровневый, динамичный, объектно-ориентированный язык программирования. Он ориентирован на повышение производительности программиста и читаемости кода. Разработчиком кода является Гвидо ван Россум. Впервые язык увидел свет в 1991 году. При создании Python, автор вдохновлялся такими языками программирования как ABC, Haskell, Java, Lisp, Icon и Perl. Python является высокоуровневым, кроссплатформенным, но в то же время минималистичным языком. Одним из его основных преимуществ является отсутствие скобок и точек с запятой. Вместо этого Python использует отступы. Сегодня существует две основные ветви языка: Python 2.7 и Python 3.x.
Стоит отметить, что Python 3 нарушает обратную совместимость с предыдущими версиями языка. Его разработали для того, чтобы исправить ряд недостатков конструкции уже существующего языка, упростить и очистить его от ненужных деталей. Последней версией Python 2.x является 2.7.17, а Python 3.x – 3.8.5. Данный учебник написан на Python 2.x, равно как и большая часть кода. Мы обновили учебник под Python 3.8.
Для перехода программного обеспечения и самих разработчиков на Python 3.x потребуется какое-то время. Уже перешли все на Python 3. Сегодня Python поддерживается большим количеством добровольцев со всего мира. Напомню, что язык имеет открытый исходный код.
Python – это идеальный язык для тех людей, которые хотят научиться программировать.
Язык программирования Python поддерживает несколько стилей программирования. Он не принуждает разработчика придерживаться определенной парадигмы. Python поддерживает объектно-ориентированное и процедурное программирование. Существует и ограниченная поддержка функционального программирования.
Создание обычного окна в Tkinter
В нашем первом примере мы покажем стандартное окно на экране.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/usr/bin/python # -*- coding: utf-8 -*- from tkinter import Tk, Frame, BOTH class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent, background="white") self.parent = parent self.initUI() def initUI(self): self.parent.title("Simple") self.pack(fill=BOTH, expand=1) def main(): root = Tk() root.geometry("250x150+300+300") app = Example(root) root.mainloop() if __name__ == '__main__': main() |
Несмотря на то, что код небольшой, окно приложения может сделать много интересных вещей. Оно может изменяться, сворачиваться и разворачиваться. Вся сложность, которая была связана с этими функциями, полностью скрыта от разработчика.
1 |
from tkinter import Tk, Frame |
Здесь мы импортируем классы Tk и frame. Первый класс Tk
используется для создания корневого окна. Второй класс Frame
играет роль контейнера для других виджетов.
1 2 3 4 |
class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent, background="white") |
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Класс Example
унаследовал виджет контейнера Frame
. Используя конструкторский метод __init__() мы можем обращаться к конструктору нашего родительского класса. Параметр background
определяет цвет виджета Frame
.
1 |
self.parent = parent |
Мы сохраняем ссылку на родительский виджет. В нашем случае родительским виджетом выступает корневое окно Tk
.
1 |
self.initUI() |
Мы делегируем создание пользовательского интерфейса методу initUI()
.
1 |
self.parent.title("Simple") |
Мы задаем заголовок окну при помощи метода title()
.
1 |
self.pack(fill=BOTH, expand=1) |
Метод pack() является одним из трех менеджеров геометрии в Tkinter. Именно он отвечает за горизонтальное и вертикальное размещение виджетов. На примере мы используем виджет Frame, доступ к которому получен атрибутом к корневому окну Tk. Он расширяется в обоих направлениях. Иными словами, он занимает все клиентское пространство корневого окна.
1 |
root = Tk() |
Корневое окно создано. Стоит отметить, что корневое окно является основным окном приложения в нашей программе. У него присутствуют заголовок и границы, реализованные менеджером окон. Корневое окно необходимо создавать для любых виджетов.
1 |
root.geometry("250x150+300+300") |
Метод geometry()
задает размер окна и его расположение на экране. Первые два параметра определяют ширину и высоту окна. Последние два отвечают за «x» и «y» координаты на экране.
1 |
app = Example(root) |
Здесь мы инициализируем класс приложения.
1 |
root.mainloop() |
И, наконец-то, мы подходим к mainloop
(Основной Цикл). Обработка событий начинается именно с этой точки. MainLoop получает информацию о событиях от системы окна и отправляет их к виджетам приложения. Окно закрывается, когда мы нажимаем на кнопку закрытия или используем метод quit()
.
Фигура: Обычное окно
Расположение окна по центру экрана в Tkinter
Этот скрипт позволяет установить окно по центру экрана.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#!/usr/bin/python # -*- coding: utf-8 -*- from tkinter import Tk, Frame, BOTH class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent, background="white") self.parent = parent self.parent.title("Окно по центру экрана") self.pack(fill=BOTH, expand=1) self.centerWindow() def centerWindow(self): w = 290 h = 150 sw = self.parent.winfo_screenwidth() sh = self.parent.winfo_screenheight() x = (sw - w) / 2 y = (sh - h) / 2 self.parent.geometry('%dx%d+%d+%d' % (w, h, x, y)) def main(): root = Tk() ex = Example(root) root.mainloop() if __name__ == '__main__': main() |
Нам нужно узнать размер окна и размер экрана, чтобы центрировать окно.
1 2 |
w = 290 h = 150 |
Это значения ширины и высоты окна нашего приложения.
1 2 |
sw = self.parent.winfo_screenwidth() sh = self.parent.winfo_screenheight() |
С помощью этого кода мы определяем ширину и высоту экрана.
1 2 |
x = (sw - w)/2 y = (sh - h)/2 |
Теперь мы рассчитываем необходимые координаты «x» и «y».
1 |
self.parent.geometry('%dx%d+%d+%d' % (w, h, x, y)) |
В конце мы используем метод geometry()
, чтобы центрировать окно на экране.
Создаем кнопку выхода из приложения в Tkinter
В последнем примере этого раздела мы научимся создавать кнопку выхода. Когда мы нажимаем на эту кнопку, приложение закрывается.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#!/usr/bin/python # -*- coding: utf-8 -*- from tkinter import Tk, BOTH from tkinter.ttk import Frame, Button, Style class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Кнопка выхода из приложения") self.style = Style() self.style.theme_use("default") self.pack(fill=BOTH, expand=1) quitButton = Button(self, text="Закрыть окно", command=self.quit) quitButton.place(x=50, y=50) def main(): root = Tk() root.geometry("250x150+300+300") Example(root) root.mainloop() if __name__ == '__main__': main() |
Мы добавляем кнопку в нашем окне. Нажатие на кнопку завершит работу приложения.
1 |
from tkinter.ttk import Frame, Button, Style |
Tkinter поддерживает стилизацию виджетов. Стилизованные виджеты можно импортировать из tkinter.ttk
модуля.
1 2 |
self.style = Style() self.style.theme_use("default") |
Мы применяем тему к нашим виджетам. Среди поддерживаемых тем: calm, default, alt и classic.
1 |
quitButton = Button(self, text="Quit", command=self.quit) |
Мы создаем образец виджета Button (кнопки). Контейнер Frame является родительским для этой кнопки. Мы обеспечиваем ярлык для кнопки и команду. Команда определяет использующийся метод при нажатии на кнопку. В нашем случае используется метод quit()
, который завершает работу приложения.
1 |
quitButton.place(x=50, y=50) |
Мы используем менеджер геометрии place()
для того, чтобы установить координаты 50х50
пикселей для кнопки от верхнего левого угла окна.
Это был раздел ознакомления с инструментом Tkinter.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»