GUI (графический интерфейс пользователя)
Обзор библиотек для создания графического интерфейса пользователя (GUI).
Игра Тетрис на PyQt5
Игра Тетрис – одна из самых популярных компьютерных игр. Оригинальная игра была разработана и запрограммирована русским программистом Алексеем Пажитновым в 1985 году. С тех пор Тетрис доступен на почти каждой компьютерной платформе в множестве вариаций.
Создание простой компьютерной игры на PyQt5 – отличный способ повышения навыков программирования.
Создание собственного виджета в PyQt5
PyQt5 имеет богатый набор готовых виджетов. Тем не менее, нет в мире инструментария, способного предоставить все виджеты, в которых программисты могут нуждаться для своих приложений. Библиотеки обычно предоставляют только самые распространенные виджеты, такие как кнопки, текстовые виджеты или ползунки. Если есть необходимость в более специализированных виджетах, мы должны создать их сами.
Рисование в PyQt5
Система рисования PyQt5 способна обрабатывать векторную графику, изображения и шрифты. Рисование необходимо в приложениях, когда мы хотим изменить или улучшить существующий виджет, или мы создаём пользовательский виджет с нуля. Чтобы сделать рисунок, мы используем API рисования, предоставленное инструментарием PyQt5.
Перетаскивание (drag & drop) в PyQt5
В этой части руководства по PyQt5, мы поговорим об операциях drag & drop. В графических интерфейсах, drag & drop – это действие клика на виртуальный объект и перетаскивания его в другое положение или в другой виртуальный объект.
Виджеты в PyQt5 (часть 2)
Мы продолжим знакомство с виджетами PyQt5.
Мы обсудим QPixmap, QLineEdit, QSplitter и QComboBox.
Виджеты в PyQt5
Виджеты – это основные строительные кирпичики приложения. PyQt5 имеет множество разнообразных виджетов, включая кнопки, чекбоксы, ползунки и списки. В этой части руководства, мы опишем несколько полезных виджетов: QCheckBox, ToggleButton, QSlider, QProgressBar и QCalendarWidget.
Диалоговые окна в PyQt5
Диалоговые окна (диалоги) являются неотъемлемой частью большинства современных графических приложений. Диалог в обычной жизни — это беседа между двумя и более людьми. В компьютерном приложении, диалог – это окно, которое используется, чтобы «беседовать» с приложением. Диалоги используются для ввода и изменения данных, изменения настроек приложения, и так далее.
События и сигналы в PyQt5
В этой части учебника PyQt5, мы изучим события и сигналы, встречающиеся в приложениях.
Управление макетом в PyQt5
Значимая сторона в программировании графических приложений – управление макетом, то есть расположение виджетов в окне приложения. Управление макетом можно осуществлять двумя основными способами: с помощью абсолютного позиционирования или специальных классов.
Меню и тулбары в PyQt5
В этой части учебника PyQt5, мы создадим меню и тулбар (панель инструментов). Меню представляет собой группу команд, расположенных в менюбаре. Панель инструментов содержит кнопки с некоторыми общими командами в приложении.
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
5. Tkinter. Создание графического интерфейса¶
Многие программы на сегодняшний день используют графический интерфейс, который более интуитивен и удобен для пользователя, чем консоль. И с помощью языка программирования Python также можно создавать графические программы. Для этого в Python по умолчанию применяется специальный тулкит — набор компонентов, который называется tkinter.
Тулкит tkinter доступен в виде отдельного встроенного модуля, который содержит все необходимые графические компоненты — кнопки, текстовые поля и т.д.
Базовым моментом в построении графических программ является создание окна. Затем в окно добавляются все остальные компоненты графического интерфейса. Поэтому создадим вначале простейшее окно. Для этого определим следующий скрипт:
from tkinter import * root = Tk() ''' any code ''' root.mainloop()
Для создания графического окна применяется конструктор Tk(), который определен в модуле tkinter. Создаваемое окно присваивается переменной root, и через эту переменную мы можем управлять атрибутами окна. Вместо комментария „“„any code“„“ добавляются все необходимые компоненты окна.
Для отображения окна надо вызвать у него метод mainloop(), который запускает цикл обработки событий окна для взаимодействия с пользователем.
В результате при запуске скрипта мы увидим такое пустое окошко:

C помощью метода title() можно установить заголовок окна.
С помощью метода geometry() — размер окна. Для установки размера в метод geometry() передается строка в формате «Ширина x Высота». Если при создании окна приложения метод geometry() не вызывается, то окно занимает то пространство, которое необходимо для размещения внутреннего содержимого:
from tkinter import * root = Tk() root.title('My first window title') root.geometry('350x200') root.mainloop()

5.1.1. Начальная позиция окна¶
По умолчанию окно позиционируется в верхний левый угол экрана. Но мы можем изменить его положение, передав нужные значения в метод geometry():
from tkinter import * root = Tk() root.title("My second Python window") root.geometry("400x300+300+250") root.mainloop()
Теперь строка в методе geometry имеет следующий формат: «Ширина x Высота + координатаX + координатаY». То есть при запуске окно будет находиться на 300 пикселей вправо и на 250 пикселей вниз от верхнего левого угла экрана.
5.2. Label — метка¶
Тулкит tkinter содержит набор компонентов или виджетов, одним из которых является метка — label. Метки (или надписи) — это достаточно простые виджеты, содержащие строку (или несколько строк) текста и служащие в основном для информирования пользователя.
Добавим кнопку в окно:
from tkinter import * root = Tk() lbl = Label(root, text="This text wrote in the first label!") lbl.pack() root.mainloop()
Для создания метки используется конструктор Label(). В этом конструкторе с помощью параметра text можно установить текст виджета. Чтобы сделать элемент видимым, у него вызывается метод pack(). В итоге вверху окна будет красоваться метка с текстом:

Для создания двух и более виджетов достаточно просто создать кнопку и добавить его в окно:
from tkinter import * root = Tk() lbl = Label(root, text="This text wrote in the first label!") lbl2 = Label(root, text="This text wrote in the second label!") lbl.pack() lbl2.pack() root.mainloop()

Каждый виджет, имеет ряд атрибутов, которые влияют на ее визуализацию и которые мы можем настроить через конструктор:
from tkinter import * root = Tk() lbl = Label(root, text="Hello", font=("Arial Bold", 50), bg="lightgreen") lbl.pack() root.mainloop()

5.3. Button — кнопка¶
Для создания кнопки используется конструктор Button(). В этом конструкторе с помощью параметра text можно установить текст кнопки:
from tkinter import * root = Tk() btn = Button(root, text="Click me!") btn.pack() root.mainloop()
Чтобы сделать элемент видимым, у него вызывается метод pack(). В итоге вверху окна будет красоваться кнопка:

Каждый виджет, в том числе кнопка, имеет ряд атрибутов, которые влияют на ее визуализацию и которые мы можем настроить через конструктор:
from tkinter import * root = Tk() btn = Button(root, text="Click me!", fg="red", bg="yellow") btn.pack() root.mainloop()
Параметры bg — background и fg — foreground получают значение цвета. Результат выполнения:

5.4. Параметры виджетов¶
Всего же конструктор Button может принимать следующие параметры:
Button(master, options)
Параметр master представляет ссылку на родительский контейнер. В случае выше это могло бы быть само графическое окно, и мы могли написать:
root = Tk() root.title("GUI на Python") root.geometry("300x250") btn = Button(root, text="Hello") btn.pack()
Однако если в коде создается одно окно, то кнопка и любой другой элемент уже по умолчанию размещаются в этом окне. Поэтому первый параметр мы можем опустить, как в примерах выше. Если бы у нас в коде создавалось бы несколько окон, тогда мы могли бы передать в конструктор Button ссылку на нужное окно.
Второй параметр options представляет набор на самом деле набор параметров, которые мы можем установить по их имени:
- activebackground: цвет элемента, когда он находится в нажатом состоянии
- activeforeground: цвет текста элемента, когда он в нажатом состоянии
- bd: толщина границы (по умолчанию 2)
- bg/background: фоновый цвет
- fg/foreground: цвет текста
- font: шрифт текста, например, font=»Arial 14» — шрифт Arial высотой 14px, или font=(«Verdana», 13, «bold») — шрифт Verdana высотой 13px с выделением жирным
- height: высота элемента
- highlightcolor: цвет элемента, когда она в фокусе
- image: изображение на элементе
- justify: устанавливает выравнивание текста. Значение LEFT выравнивает текст по левому краю, CENTER — по центру, RIGHT — по правому краю
- padx: отступ от границ элемента до ее текста справа и слева
- pady: отступ от границ элемента до ее текста сверху и снизу
- relief: определяет тип границы, может принимать значения SUNKEN, RAISED, GROOVE, RIDGE
- state: устанавливает состояние элемента, может принимать значения DISABLED, ACTIVE, NORMAL (по умолчанию)
- text: устанавливает текст элемента
- textvariable: устанавливает привязку к элементу StringVar
- underline: указывает на номер символа в тексте элемента, который подчеркивается. По умолчанию значение -1, то есть никакой символ не подчеркивается
- width: ширина элемента
- wraplength: при положительном значении строки текста будут переносится для вмещения в пространство элемента
Оглавление
- 5. Tkinter. Создание графического интерфейса
- 5.1. Создание окна приложения
- 5.1.1. Начальная позиция окна
Основы Tkinter
Многие программы на сегодняшний день используют графический интерфейс, который более интуитивен и удобен для пользователя, чем консоль. И с помощью языка программирования Python также можно создавать графические программы. Для этого в Python по умолчанию применяется специальный тулкит — набор компонентов, который называется tkinter . Тулкит tkinter доступен в виде отдельного встроенного модуля, который содержит все необходимые графические компоненты — кнопки, текстовые поля и т.д.
По сути Tkinter представляет интерфейс в Python для графической библиотеки Tk (Собственно само название «Tkinter» является сокращением «Tk interface»). Первоначально данная библиотека разрабатывалась для языка Tcl — ее создал в 1988 году Джон Остерхаут (John Ousterhout), профессор computer science из Беркли для создания графических приложений для своего языка Tcl. Но впоследствии Tk была адаптирована для широкого ряда динамических языков, в частности, для Ruby, Perl и естественно для языка Python (в 1994 году). И на сегодняшний день и библиотека Tk, и сам тулкит tkinter доступны для большинства операционных систем, в том числе для Mac OS, Linux и Windows.
- Данный тулкит по умолчанию включен в стандартную библиотеку языка Python в виде отдельного модуля, поэтому не потребуется что-то дополнительно устанавливать
- Tkinter — кроссплатформенный, один и тот же код будет работать одинаково на разных платформах (Mac OS, Linux и Windows)
- Tkinter легко изучать. Сам тулкит, хотя и содержит некоторый готовый код, виджеты и графические элементы, но при этом довольно лаконичен и прост.
- Tk распространяется по BSD-лицензии, поэтому библиотека может быть использована как в опенсорсных проектах, так и в коммерческих наработках.
Если необходимо или интересно узнать версию библиотеки Tk, которая будет использоваться, в интерпертаторе Python можно выполнить следующую инструкцию:
tkinter.Tcl().eval("info patchlevel")C:\Users\eugen>python Python 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import tkinter >>> >>> tkinter.Tcl().eval("info patchlevel") '8.6.12' >>>В некоторых ОС на базе Linux иногда при установке python не устанавливается пакет tkinter. В этом случае мы можем доустановить thinkter командой
sudo apt-get install python3-tk
Первая программа
Создадим первую программу с использованием Tkinter. Для этого определим следующий скрипт:
from tkinter import * root = Tk() # создаем корневой объект - окно root.title("Приложение на Tkinter") # устанавливаем заголовок окна root.geometry("300x250") # устанавливаем размеры окна label = Label(text="Hello METANIT.COM") # создаем текстовую метку label.pack() # размещаем метку в окне root.mainloop()Для создания графического окна применяется конструктор Tk() , который определен в модуле tkinter. Создаваемое окно присваивается переменной root, и через эту переменную мы можем управлять атрибутами окна. В частности, с помощью метода title() можно установить заголовок окна.
С помощью метода geometry() — размер окна. Для установки размера в метод geometry() передается строка в формате «Ширина x Высота». Если при создании окна приложения метод geometry() не вызывается, то окно занимает то пространство, которое необходимо для размещения внутреннего содержимого.
Создав окно, мы можем разместить в нем другие графические элементы. Эти элементы еще называются виджетами. В данном случае мы размещаем в окне текстовую метку. Для это создаем объект класса Label , которые хранит некоторый текст. Затем для размещения элемента label в окне вызываем у него метод pack()
Для отображения окна надо вызвать у него метод mainloop() , который запускает цикл обработки событий окна для взаимодействия с пользователем.
В результате при запуске скрипта мы увидим такое пустое окошко:

На скриншоте выше определено окно, создаваемое в ОС Windows, на каждой конкретной системе отдельные визуальные моменты, отрисовка графических компонентов может несколько отличаться.
Python. Как сделать интерфейс для программы без сторонних модулей и библиотек?
Хочу сделать интерфейс программы, но не хочу использовать tkinter, qiwi, qt и т.д. Помогите пожалуйста. Может есть какая то литература?
Отслеживать
405 2 2 серебряных знака 7 7 бронзовых знаков
задан 18 ноя 2021 в 12:40
65 2 2 серебряных знака 11 11 бронзовых знаковНо зачем? Вы в одиночку сможете сделать только интерфейс, привязанный к конкретной ОС. Вам придётся изучать низкоуровневую работу с экраном в этой ОС и т.д. Сделать можно, но придётся изучать много информации, которая скорее всего вам потом никак не пригодится. И которая не имеет почти никакого отношения собственно к питону.
18 ноя 2021 в 12:53
а как тогда работают другие фреймворки модули? они же тоже на питоне написаны?
18 ноя 2021 в 13:02Ну, самая верхняя логика — да, на питоне, а низкоуровневая часть обычно на С++ с вызовом всяких библиотек операционки.
18 ноя 2021 в 13:12
так с++ это же высокоуровневый язык
18 ноя 2021 в 13:15Он на любой уровень. Но он мягко говоря своеобразный и больше подходит всё же для низкоуровневых вещей
18 ноя 2021 в 13:20
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Никак. Базовыми средствами Python это невозможно.
Отслеживать
ответ дан 18 ноя 2021 в 12:53
1,367 4 4 серебряных знака 17 17 бронзовых знаковДа, тоже хотел написать: python — это не про GUI — интерфейс. Во всяком случае, без тех штук, котрые автор вопроса перечислил
18 ноя 2021 в 12:55
а как тогда они реализовали это в питоне? :/ qt, qiwi. Это же все тоже на питоне
18 ноя 2021 в 12:58@Dariuz Там идет привязка к С++ библиотеке. Почитайте про SIP. P.S. Да и вообще вопрос странный я не могу придумать в какой ситуации нельзя пользоваться сторонними графическими интерфейсами.
18 ноя 2021 в 13:04
В ситуации, когда хочешь оптимизировать свою программу до максимума, либо создать свой фреймворк
18 ноя 2021 в 13:15
@Dariuz Оптимизируют не так. А фреймворк вы будете несколько лет писать
18 ноя 2021 в 13:22Написать свою библиотеку-интерфейс на питоне, скорее всего, возможно(хотя не представляю как). Вопрос состоит в том, сколько времени ты на это потратишь, тк python довольно высокоуровневый для написания таких библиотек. Ближайшая интерфейс-библиотека — Pyqt, написана на «C++». thinker написан на «Tcl». Какой вывод: либо писать на более низкоуровневом языке, либо использовать то что уже есть.
- 5.1. Создание окна приложения
