Основы Tkinter на Python 3 для начинающих - Tkinter Примеры

В этой части обучения Tkinter мы познакомим Вас с инструментом Tkinter и создадим первые программы. Целью этого руководства является ознакомление с базой инструментария Tkinter. Я использовал несколько иконок из набора Tango от Gnome project.

Содержание курса

  1. Создание окна по центру и кнопка выхода в Tkinter
  2. Разметка виджетов в Tkinter — pack, grid и place
  3. Виджеты Checkbutton, Label, Scale и Listbox в Tkinter
  4. Меню, подменю и панель инструментов в Tkinter
  5. Диалоговые окна в Tkinter
  6. Рисуем линии, прямоугольники, круг и текст в Tkinter
  7. Пишем игру змейка на 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()

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

from tkinter import Tk, Frame

Здесь мы импортируем классы Tk и frame. Первый класс Tk используется для создания корневого окна. Второй класс Frame играет роль контейнера для других виджетов.

class Example(Frame):

    def __init__(self, parent):

        Frame.__init__(self, parent, background="white")

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Класс Example унаследовал виджет контейнера Frame. Используя конструкторский метод __init__() мы можем обращаться к конструктору нашего родительского класса. Параметр background определяет цвет виджета Frame.

Мы сохраняем ссылку на родительский виджет. В нашем случае родительским виджетом выступает корневое окно Tk.

Мы делегируем создание пользовательского интерфейса методу initUI().

self.parent.title("Simple")

Мы задаем заголовок окну при помощи метода title().

self.pack(fill=BOTH, expand=1)

Метод pack() является одним из трех менеджеров геометрии в Tkinter. Именно он отвечает за горизонтальное и вертикальное размещение виджетов. На примере мы используем виджет Frame, доступ к которому получен атрибутом к корневому окну Tk. Он расширяется в обоих направлениях. Иными словами, он занимает все клиентское пространство корневого окна.

Корневое окно создано. Стоит отметить, что корневое окно является основным окном приложения в нашей программе. У него присутствуют заголовок и границы, реализованные менеджером окон. Корневое окно необходимо создавать для любых виджетов.

root.geometry("250x150+300+300")

Метод geometry() задает размер окна и его расположение на экране. Первые два параметра определяют ширину и высоту окна. Последние два отвечают за «x» и «y» координаты на экране.

Здесь мы инициализируем класс приложения.

И, наконец-то, мы подходим к mainloop (Основной Цикл). Обработка событий начинается именно с этой точки. MainLoop получает информацию о событиях от системы окна и отправляет их к виджетам приложения. Окно закрывается, когда мы нажимаем на кнопку закрытия или используем метод quit().

Создание окна в Tkinter

Фигура: Обычное окно

Расположение окна по центру экрана в 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()

Нам нужно узнать размер окна и размер экрана, чтобы центрировать окно.

Это значения ширины и высоты окна нашего приложения.

sw = self.parent.winfo_screenwidth()

sh = self.parent.winfo_screenheight()

С помощью этого кода мы определяем ширину и высоту экрана.

x = (sw - w)/2

y = (sh - h)/2

Теперь мы рассчитываем необходимые координаты «x» и «y».

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()

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

from tkinter.ttk import Frame, Button, Style

Tkinter поддерживает стилизацию виджетов. Стилизованные виджеты можно импортировать из tkinter.ttk модуля.

self.style = Style()

self.style.theme_use("default")

Мы применяем тему к нашим виджетам. Среди поддерживаемых тем: calm, default, alt и classic.

quitButton = Button(self, text="Quit", command=self.quit)

Мы создаем образец виджета Button (кнопки). Контейнер Frame является родительским для этой кнопки. Мы обеспечиваем ярлык для кнопки и команду. Команда определяет использующийся метод при нажатии на кнопку. В нашем случае используется метод quit(), который завершает работу приложения.

quitButton.place(x=50, y=50)

Мы используем менеджер геометрии place() для того, чтобы установить координаты 50х50 пикселей для кнопки от верхнего левого угла окна.

Tkinter кнопка выхода из приложения

Это был раздел ознакомления с инструментом Tkinter.

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: vasile.buldumac@ati.utm.md

Образование
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»