Table of Contents

f375a21a.png

Tkinter – это кроссплатформенная библиотека для разработки графического интерфейса на языке Python (начиная с Python 3.0 переименована в tkinter). Tkinter расшифровывается как Tool kit interface, и является интерфейсом для языка програмирования Tcl и графической для него привязки tk.Не вдаваясь в подробности, Tkinter можно охарактеризовать как переводчик с языка Python на язык Tcl. Вы пишете программу на Python, а код модуля tkinter у вас за спиной переводит ваши инструкции на язык Tcl(тикль-токль), который понимает библиотека Tk (tool kit).

Конечно для python есть и другие более мощные и интересные библиотеки графического интерфейса такие как: pygame и qiwi, qt и gtk.Однако pygame расчитан больше на разработку видео игр, qiwi лучше использовать для мобильных платформ , qt и gtk несколько сложнее в изучении и могут иметь много не нужного на первых этапах . А вот tkinter хорош для протипирования и быстрой разработки,а потому он идеально подходит для начинающих. В плюсы данной библиотеке можно записать её наличие в стандартном дистрибутиве python,в то время,как другие библиотеки для создания графического интерфейса требует отдельной установки через внутренний менеджер пакетов питона pip.

Под графическим интерфейсом пользователя (GUI или graphical user interfase) подразумеваются все окна, кнопки, текстовые поля для ввода, скроллеры, списки, флаги. Через них пользователь взаимодействует с программой и управляет ею. Все эти элементы интерфейса называются виджетами (widgets).

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

Событийно-ориентированное программирование базируется на объектно-ориентированном и структурном. Даже если мы не создаем собственных классов и объектов, то все-равно ими пользуемся. Все виджеты – объекты, порожденные встроенными классами.

События бывают разными. Сработал временной фактор, кто-то кликнул мышкой или нажал Enter, начал вводить текст, переключил радиокнопки, прокрутил страницу и т. д. Когда случается что-то подобное, то, если был создан соответствующий обработчик, происходит срабатывание определенной части программы(trigger), что приводит к какому-либо результату. Например в наших часах как только сменяется системное время,сразу обновляется счётчик. Вот вам и наглядный пример событийно-ориентированого програмирования.

Далее, чтобы написать GUI-программу, надо в своей программе следовать следуещему плану:

1) Создать главное окно.

2)Создать виджеты и выполнить конфигурацию их свойств (опций).

3)Определить события, то есть то, на что будет реагировать программа.

2)Определить обработчики событий, то есть то, как будет реагировать программа.

4)Расположить виджеты в главном окне.

5)Запустить цикл обработки событий.

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

В качестве учебного проекта можно написать свою реализацию стандартного ПО. Для примера я написал простые часы. Простые и без наворотов. Но при желании всегда можно расширить функционал. Благо софт находится под свободной лицензией GNU GPL v2. Исходный код программы лежит на Github. Вы можете спокойно почитать исходный код программы , сделать code-review, внести правки или вовсе создать ответвление(fork).

Для начала импортируем необходимые для работы программы модули , а именно time(отвечает за операции связанные со времинем и манипуляциями над ним) и собственно tkinter:

	from tkinter import *
	import time

Следующая часть кода отвечает за отображение заголовка,шрифт,цвет текста

	root = Tk()
	root.title("tkClock")
	time1 = ''
	clock = Label(root, font=('bold', 20, 'bold'), bg='white')
	clock.pack(fill=BOTH, expand=1)

Далее мы создаем функцию ,которая при помощи time.strftime узнает текущее системное время. Далее оно передаётся в тело программы. Сразу как только системное время изменяется,происходит обновление фрейма. При этом проверка времени происходит каждые 200 милисекунд,что позволяет поддерживать баланс между производительностью и точностью:

	def tick():
    	global time1
    	# узнаем время 
    	time2 = time.strftime('%H:%M:%S') 
    	# фрейм обновляется как только время меняется
    	if time2 != time1:
        	time1 = time2
        	clock.config(text=time2)
        	# вызовы идут каждые 200 милисекунд
    	clock.after(200, tick)

Последние строчки закрывают цикл “clock” и позволяют закрыть окно,если того пожелает пользователь:

	tick()
	root.mainloop()

Программа вышла очень простой , однако никто не мешает доработать её или вообще переписать полностью. Благо open source.

Вот и всё. Tkinter – это, безусловно, мощная и удобная библиотека.

Полезные ссылки:

http://ru.wikiversity.org

http://www.pythonware.com/

Хочешь помочь проекту? Просто оставь комментарий или поделись этой статьёй с друзьями.