Як зараз роблять інтерфейси в Python для додатків з БД?
Раніше десктопні програми часто писали через Microsoft Visual Basic 2010: відкрив форму, розставив елементи мишкою, підключив обробники — і готово. Весь процес був максимально візуальний і швидкий.
У Python підхід інший — варіантів більше, але немає одного «дефолтного» рішення.
Основні варіанти
1. Tkinter
Стандартна бібліотека, яка є в Python.
Приклад:
import tkinter as tk
root = tk.Tk()
def run():
print("start")
tk.Button(root, text="Run", command=run).pack()
root.mainloop()
Як правило, використовується для:
- простих утиліт
- швидких внутрішніх інструментів
- невеликих GUI без складної логіки
2. PyQt / PySide
Фреймворк на базі Qt.
Дає:
- повноцінний GUI
- роботу з таблицями, формами, діалогами
- візуальний редактор (Qt Designer)
Приклад підключення форми:
from PyQt5 import QtWidgets, uic
app = QtWidgets.QApplication([])
window = uic.loadUi("design.ui«)
window.show()
app.exec()
Часто застосовується для:
- десктопних додатків
- адмін-панелей
- внутрішніх інструментів із таблицями та формами
3. Kivy
Фреймворк зі своїм підходом до UI.
Використовується, коли потрібні:
- кастомні інтерфейси
- кросплатформені або мобільні рішення
4. Web-інтерфейс
Замість GUI часто роблять:
- backend на FastAPI або Django
- інтерфейс у браузері
Цей підхід дає:
- незалежність від ОС
- простіше розгортання
- можливість доступу з різних пристроїв
Приклад задачі
Типова утиліта на Python:
- імпорт даних з Excel
- робота з БД
- обробка даних
- лог виконання
Для цього зазвичай роблять:
- кнопку запуску
- вибір файлу
- таблицю або список
- лог
Питання
Як це зараз реалізується на практиці?
- що частіше використовують для таких задач — Tkinter чи PyQt/PySide?
- чи має сенс одразу робити web навіть для локальних інструментів?
- які варіанти реально використовуються в роботі, а не тільки «існують»?
Цікавий саме реальний досвід: що використовується і чому.
13 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівЯкщо треба щось швидко накидати, то рекомендую streamlit. Мінімум коду, дуже красивий інтерфейс, підтримка pandas, як джерело даних.
Так, читав про Streamlit
Виглядає як дуже зручний варіант, коли потрібно швидко підняти web-інтерфейс без окремого фронтенду — все робиться на Python.
Особливо добре підходить для:
— data tools
— внутрішніх аналітичних тулзів
— швидких демо з AI
У більш складних кейсах іноді може не вистачати гнучкості, але для швидкого старту — реально зручно.
Є ще ліба qwerty, вона є повним аналогом streamlit, тільки для девопс. Може її спробувати?
Особисто я саме для десктопних додатків використовую customtkinter. Звісно, для більш-менш масштабних рішень краще PyQt5/6, але коли треба щось просте і не з «дерев’яним» зовнішнім виглядом — підходить customtkinter. Це по суті надбудова над стоковим tkinter, з усім його функціоналом, але дещо симпатичніше)
Чому PyQt5/6? Це взагалі неофіційний біндинг який не оновлюється. Використовуйте PySide, від самих Qt Group і повним комплектом фішок а не костилів.
Почитав трохи про це питання, для себе зробив такий висновок
PySide зараз виглядає більш логічним вибором для нових проєктів — як офіційний біндинг від Qt Group.
При цьому PyQt теж залишається стабільним і широко використовуваним варіантом у продакшені.
В цілому різниця між ними для розробки не критична, тому вибір більше залежить від конкретних задач і контексту проєкту.
Так, згоден
customtkinter — справді хороший компроміс, коли потрібно швидко зробити простий інтерфейс, але без «дерев’яного» вигляду стандартного Tkinter.
Для невеликих внутрішніх тулзів — цілком ок варіант.
Але якщо проєкт починає рости (таблиці, складна логіка, багато форм) — зазвичай переходять на PySide / PyQt.
Якщо дивитись у сторону web, то можна спробувати github.com/reflex-dev/reflex
З коробки є підтримка БД та таблиць. З недоліків — деякі плагіни платні (принаймні були десь рік тому). В цілому, досить цікавий проєкт.
Якщо хочеться не-веб (хоча і веб він теж уміє), то якось я натрапив на github.com/flet-dev/flet. Там теж є таблиці, але нема вбудованої підтримки БД, тому відмовився, бо довелося б вручну прикручувати якийсь SQLAlchemy.
Дякую, цікаві варіанти
Reflex виглядає якраз у сторону тих рішень, де хочеться швидко підняти web-інтерфейс без повноцінного фронтенду — особливо якщо вже є робота з БД і таблицями.
Flet теж виглядає цікавим як компроміс між desktop і web, але так, питання з БД трохи стримує — коли треба руками прикручувати ORM, втрачається частина «швидкого старту».
В цілому зараз якраз видно тренд у бік таких інструментів, які намагаються спростити зв’язку Python + UI без окремого фронтенду.
Ще останнім часом частіше почали використовуватись TUI інтерфейси. Типу github.com/textualize/textual
Можливо їх сфера застосовування обмежена, але краще коли є більше варіантів для вибору, ніж менше.
Так, є такий тренд
Textual і подібні рішення виглядають цікавим варіантом для інструментів, де не критичний класичний GUI.
Особливо добре заходить для:
— dev-тулзів
— адмінських утиліт
— роботи з логами та даними в консолі
Звісно, сфера застосування обмежена, але як альтернатива «простому GUI» — цілком робочий варіант.
Я собі навайбкодив програму Екранний час для Windows в TUI-стилі:
res.cloudinary.com/.../swm3s1qw7p7whhbgynpy.png
Why TUIs are back
wiki.alcidesfonseca.com/blog/why-tuis-are-back