Подбор инструмента для визуальных приложений в Python

Раздел: Графические интерфейсы -> Графический интерфейс (GUI)

Графические библиотеки Python: обзор и сравнение

Как создать полнофункциональное настольное приложение с использованием PyQt5?

PyQt5 - это мощная библиотека для создания настольных приложений с богатым набором виджетов, поддержкой стилей, сигналов и слотов. Она основана на Qt и предоставляет Python интерфейс. Для начала работы требуется установка: pip install PyQt5.


import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Пример PyQt5')
        button = QPushButton('Нажми меня')
        button.clicked.connect(self.on_click)
        layout = QVBoxLayout()
        layout.addWidget(button)
        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def on_click(self):
        print('Кнопка нажата')

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
  

Import tkinter as tk python (импорт tkinter как tk в python)

В этом примере создаётся главное окно с одной кнопкой. Метод clicked.connect связывает событие нажатия с функцией on_click. Запуск приложения выполняется через app.exec_(), который входит в цикл обработки событий.

Типичные проблемы:

  • Ошибка импорта PyQt5 - не установлена библиотека. Решение: выполнить pip install PyQt5.
  • Не запускается окно - забыт вызов app.exec_(). Без него приложение завершится сразу.
  • Проблемы с макетом - виджеты не отображаются, если не назначен layout или centralWidget.
  • Конфликт версий - PyQt5 может не работать с Python 3.12 на некоторых платформах. Рекомендуется использовать Python 3.8-3.11.

Как быстро создать простое GUI без установки дополнительных библиотек?

Tkinter входит в стандартную поставку Python. Для создания окна с кнопкой достаточно нескольких строк.


import tkinter as tk

root = tk.Tk()
root.title('Пример Tkinter')

def on_click():
    print('Нажато')

button = tk.Button(root, text='Нажми', command=on_click)
button.pack()

root.mainloop()
  

графическая среда python (графическая среда разработки на python)

Функция pack() размещает виджет. Цикл mainloop() запускает обработку событий.

Ошибка: tkinter может отсутствовать в некоторых сборках Python (например, на минимальных Docker образах). Решение: установить пакет python3-tk в системе.

Как создать мультитач интерфейс для мобильных устройств?

Kivy ориентирован на кроссплатформенность и сенсорное управление. Установка: pip install kivy.


import kivy
from kivy.app import App
from kivy.uix.button import Button

class MyApp(App):
    def build(self):
        return Button(text='Нажми меня')

MyApp().run()
  

графический код python (графический код на python)

Метод build() возвращает корневой виджет. Kivy использует свой собственный цикл выполнения.

Проблема: при запуске возникает ошибка импорта kivy - не установлены зависимости (Cython, SDL2). Решение: установить через pip install kivy[full] или использовать готовый образ.

Как получить нативный внешний вид интерфейса на разных ОС?

wxPython использует системные виджеты, что даёт естественный вид под Windows, macOS и Linux. Установка: pip install wxPython.


import wx

app = wx.App()
frame = wx.Frame(None, title='Пример wxPython')
panel = wx.Panel(frame)
button = wx.Button(panel, label='Нажми')
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(button, 0, wx.ALL, 10)
panel.SetSizer(sizer)
frame.Show()
app.MainLoop()
  

Python self tkinter (использование self в tkinter)

Здесь wx.BoxSizer управляет размещением. app.MainLoop() запускает цикл.

Ошибка: ModuleNotFoundError wx - на Linux требуется установка системных пакетов (libwxgtk3.0). Решение: sudo apt install python3-wxgtk4.0.

Как создать высокопроизводительное приложение для визуализации данных?

Dear PyGui использует GPU для отрисовки, что обеспечивает высокую частоту кадров. Установка: pip install dearpygui.


import dearpygui.dearpygui as dpg

dpg.create_context()

def on_click(sender, app_data):
    print('Нажато')

with dpg.window(label='Пример DearPyGui', width=400, height=300):
    dpg.add_button(label='Нажми', callback=on_click)

dpg.create_viewport(title='Пример')
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
  

Tkinter python buttons (кнопки в tkinter (англ.))

Контекст создаётся один раз, окно формируется через dpg.window. Callback-функция принимает параметры.

Проблема: приложение зависает при запуске - не вызван dpg.start_dearpygui(). Решение: всегда завершать настройку этим вызовом.

Как быстро создать веб-интерфейс на Python с минимальным кодом?

Flet позволяет создавать веб-приложения, которые выглядят как нативные. Установка: pip install flet.


import flet as ft

def main(page: ft.Page):
    page.title = 'Пример Flet'
    page.add(ft.ElevatedButton('Нажми', on_click=lambda e: print('Нажато')))

ft.app(target=main)
  

Функция main получает объект страницы. ft.app запускает сервер и открывает браузер.

Ошибка: при открытии страницы пустой экран - не установлен Flutter SDK? На самом деле Flet не требует Flutter, но нужен доступ к интернету для загрузки ресурсов. Решение: проверить интернет-соединение или использовать flet run --web.

- Python tkinter приложение (создание приложения на tkinter)
- Python tkinter programs (примеры программ на tkinter)
- Python графические примитивы (рисование графических примитивов в python)

Расширенный пример с PyQt5: форма ввода данных и таблица

Данный пример демонстрирует окно с полем ввода, кнопкой и таблицей, в которую добавляются данные.

Пример

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, 
                             QHBoxLayout, QLineEdit, QPushButton, QTableWidget, QTableWidgetItem)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Пример с таблицей')
        self.setGeometry(100, 100, 600, 400)

        central = QWidget()
        self.setCentralWidget(central)
        main_layout = QVBoxLayout(central)

        input_layout = QHBoxLayout()
        self.input_field = QLineEdit()
        add_btn = QPushButton('Добавить')
        add_btn.clicked.connect(self.add_row)
        input_layout.addWidget(self.input_field)
        input_layout.addWidget(add_btn)

        self.table = QTableWidget(0, 2)
        self.table.setHorizontalHeaderLabels(['Данные', 'Индекс'])

        main_layout.addLayout(input_layout)
        main_layout.addWidget(self.table)

    def add_row(self):
        text = self.input_field.text()
        if text:
            row = self.table.rowCount()
            self.table.insertRow(row)
            self.table.setItem(row, 0, QTableWidgetItem(text))
            self.table.setItem(row, 1, QTableWidgetItem(str(row)))
            self.input_field.clear()

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
Результат: открывается окно с полем ввода и кнопкой. После ввода текста и нажатия «Добавить» новая строка появляется в таблице с данными и порядковым номером.

Расширенный пример с Tkinter: рисование на Canvas

Использование виджета Canvas для рисования геометрических фигур.

Пример

import tkinter as tk

root = tk.Tk()
root.title('Canvas пример')
canvas = tk.Canvas(root, width=400, height=300, bg='white')
canvas.pack()

canvas.create_rectangle(50, 50, 150, 150, fill='blue', outline='black')
canvas.create_oval(200, 50, 300, 150, fill='red', outline='black')
canvas.create_line(50, 200, 350, 200, width=3, fill='green')

root.mainloop()
Результат: окно с белым фоном, в котором отображаются синий прямоугольник, красный овал и зелёная линия.

Расширенный пример с Kivy: использование KV языка для интерфейса

KV язык позволяет отделить описание интерфейса от логики.

Пример

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty

class MainLayout(BoxLayout):
    text = StringProperty('')

    def on_button_click(self):
        self.text = 'Привет, Kivy!'

class MyApp(App):
    def build(self):
        return MainLayout()

MyApp().run()

Файл myapp.kv:

Пример

:
    orientation: 'vertical'
    Label:
        text: root.text
    Button:
        text: 'Нажми'
        on_release: root.on_button_click()
Результат: приложение показывает метку и кнопку. После нажатия на кнопку метка изменяет текст на «Привет, Kivy!».

Расширенный пример с Dear PyGui: построение графика в реальном времени

Демонстрация добавления точек на линейный график.

Пример

import dearpygui.dearpygui as dpg
import math

dpg.create_context()

with dpg.window(label='График'):
    # Создаём оси
    with dpg.plot(label='Линейный график', height=-1, width=-1):
        dpg.add_plot_axis(dpg.mvXAxis, label='x')
        with dpg.plot_axis(dpg.mvYAxis, label='y') as y_axis:
            dpg.add_line_series([0], [0], label='sin(x)')

def update():
    # Получаем данные серии
    series = dpg.get_value('sin(x)')
    x = list(series[0])
    y = list(series[1])
    new_x = x[-1] + 0.1
    x.append(new_x)
    y.append(math.sin(new_x))
    dpg.set_value('sin(x)', [x, y])
    dpg.set_frame_callback(0.1, update)

dpg.create_viewport(title='График в реальном времени')
dpg.setup_dearpygui()
dpg.show_viewport()

dpg.set_frame_callback(0.1, update)
dpg.start_dearpygui()
dpg.destroy_context()
Результат: окно с графиком, на котором каждые 0.1 секунды добавляется новая точка, формирующая синусоиду.

Расширенный пример с Flet: форма ввода и список задач

Приложение для добавления задач в список.

Пример

import flet as ft

def main(page: ft.Page):
    page.title = 'Список задач'

    input_task = ft.TextField(hint_text='Введите задачу')
    task_list = ft.Column()

    def add_task(e):
        if input_task.value:
            task_list.controls.append(ft.Text(input_task.value))
            input_task.value = ''
            page.update()

    page.add(
        ft.Row([input_task, ft.ElevatedButton('Добавить', on_click=add_task)]),
        task_list
    )

ft.app(target=main)
Результат: веб-страница с полем ввода и кнопкой. При добавлении задачи она появляется в столбце ниже.

Графическая среда разработки на Python - comments

En
графическая среда python (python)