Что выбрать для написания GUI в 2021.
Что лучше выбрать для написания десктопного GUI приложения в 2021 году.
Нужно написать кросплатфоменный интерфейс.
Там должны быть дерево, таблицы (большие, сортировки, группировки, …), формы. Хочется не писать их самостоятельно.
- C# (WinForms или Avalonia, Gtk), поскольку на c# писал мало, и есть ощущения, что скорость разработки не очень высокая. Сходу полноценных таблиц и деревьев вообще не нашел.
- Python (PySide6), посмотрел по gui на python. Варианты по сути:
- PyQt(PySide) 6 версия уже достаточно стабильна ? Документации навскидку не очень много нашел.
- wxWidgets есть ощущение, что менее мощный. (тут смущает, что будет медленнее C# и опять же GIL).
В C++ лезть не хочется, так как давно на нем не писал, и есть ощущение, что на нем разработка будет еще медленнее чем на C#.
Предварительно кажется, что python будет компромисным вариантом.
Разработчик пока всего один, и не хочется надолго увязать в написании GUI, так как есть и другие задачи.
У кого какие соображения по данному вопросу ?
ol1mp ★
13.07.21 20:14:13 MSK
← 1 2 3 →Сам спросил — сам ответил. Уносите.
anonymous
( 13.07.21 20:18:29 MSK )
wxWidgets написаны на c++, сами виджеты не тормозят. GIL при правильной многопоточности (у wxPython свои расширения для этого) ты вообще не заметишь.
Посмотри ещё таблицы на TkInter — там есть ОЧЕНЬ навороченные решения, и всё буквально летает (для web ui до таких таблиц как до луны раком), в wx таблицы в комплекте хорошие, но для Tk сторонние решения.
Я для просмотра гигантских pandas таблиц вот это использую:
https://pandastable.readthedocs.io/en/latest/examples.html — там для таблицы виртуальный буфер, она вообще ракета.Думаю, если для группировки/сортировки возьмёшь pandas/numpy и грамотно запроектируешь ui (с буфером), то на python можно будет сделать очень быстрое приложение.
Для QT и wx есть визуальные форморисовальщики.
Shadow ★★★★★
( 13.07.21 20:19:28 MSK )
Последнее исправление: Shadow 13.07.21 20:25:32 MSK (всего исправлений: 3)Четыре способа написать Hello world, или инструменты для создания GUI на Python

После написания программы ее можно модифицировать и добавить графический интерфейс — с Python это проще, чем кажется. Для программирования красивого и функционального GUI иногда достаточно простого знания html и css.
Под катом — подборка некоторых инструментов для создания интерфейсов на Python. Сохраняйте статью в закладки и предлагайте свои варианты в комментариях!
Привет! Меня зовут Влад и уже более пяти лет я пишу на Python. Успел перепробовать многое — от олимпиадного программирования и решения исследовательских задач до BackEnd-разработки и RPA.
Могу сказать однозначно: если с программой работаете не только вы, но и, например, ваши коллеги, для нее нужно сделать интерфейс. При этом неважно, какую задачу она решает. Поэтому я собрал подборку инструментов для создания GUI на Python и мини-инструкции по работе с ними.
Если вам интересен такой формат, напишите, какую тему можно разобрать в будущем. За самую интересную идею отправим плюшевого тирекса и другой мерч Selectel.
Tkinter
Наверное, каждый заклинатель змей пробовал работать с Tkinter. Для меня это была одна из тех библиотек, с которой началось знакомство с возможностями Python.
Tkinter — это один из самых известных модулей для программирования интерфейсов под Windows, Linux и Mac.
Преимущества модуля:
- Простая установка. Достаточно установить модуль и импортировать его в программу.
- Интуитивная логика. Все просто: вызываете объект, создаете и добавляете графические элементы.
Когда-то давно я писал программу для «местных бухгалтеров», которая сравнивала электронные таблицы. Нужно было сделать интерфейс, чтобы заказчики могли работать с программой самостоятельно. И для этой задачи Tkinter хватило с запасом.
С помощью этого модуля можно делать простые десктопные приложения. Исходя из моего опыта, Tkinter отлично подходит для начинающих исследователей, которым наскучил софт вроде LabVIEW и хочется написать свой интерфейс для расчетов.
Пример работы
Для создания простой кнопки, которая при нажатии будет выводить Hello world, достаточно импортировать модуль, инициализировать фрейм и добавить соответствующий объект.
# импортируем модуль from tkinter import * def hello_world(): print("Hello world") # создаем окно main main = Tk() # добавляем кнопку, настраиваем ее форму и цвет # при нажатии сработает функция hello world btn = Button(main, width=20, height=7, text="Кнопка", bg="white", fg="black", command=hello_world) btn.pack() main.mainloop()
Пример работы программы на Tkinter, простая кнопка.
Что нужно учитывать
Tkinter — это одновременно простой и сложный инструмент для создания GUI. Так, при построении «масштабных» интерфейсов возникают трудности: работать можно только с кодом, а механика размещения элементов не всегда очевидна.
Вы можете использовать сетки grid и менеджеры геометрии place и pack. Наверное, изучение этих инструментов — самый тяжелый этап при погружении в Tkinter. Особенно, если вы хотите научиться делать адаптивные интерфейсы.

Способы размещения элементов в Tkinter.

Eel
Знаете html и css — воспользуйтесь модулем Eel. С помощью него можно создавать веб-интерфейсы в виде отдельных программ. Яркий пример, который написан на Electron, прародителе Eel, — Discord.
С помощью библиотеки Eel можно не только написать красивый интерфейс на html и css, но и динамические анимации на базе JavaScript.
Пример работы
Шаг 1. Сначала нужно создать html-документ и добавить в него разметку.
T-Rex Hello, T-Rex!
project/main.html
Шаг 2. Далее необходимо запустить html-документ с помощью Eel.
import eel eel.init("") eel.start("main.html", size=(700, 700))project/start.py
Готово — после запуска программа откроет в браузере html-документ project/main.html:

Что нужно учитывать
Модуль создает GUI на базе ядра Chromium. Плохо это для вашего проекта или нет — знаете только вы. Но потенциально могут быть проблемы с оптимизацией, потреблением оперативной памяти.
Однако с помощью Eel можно выиграть в гибкости и упростить разработку сложных адаптивных приложений — достаточно использовать старый-добрый flexbox. Например, если вам нужно приложение для просмотра больших таблиц, на базе Eel можно просто создать GUI с html-фреймом Google Sheets.
При этом пользователь приложения как бы выполняет роль клиента и сервера одновременно. Eel запускает localhost:8000 и открывает браузер — Chrome или Windows Edge — с флагом —app , который позволяет задавать размер окна по умолчанию. Проект можно скомпилировать с помощью PyInstaller или Auto PY to EXE и распространять как исполняемый файл.
Интересен Python? Мы собрали самые интересные и популярные запросы разработчиков в одном файле! По ссылке — материалы по геймдеву, машинному обучению, программированию микроконтроллеров и графических интерфейсов.
PyQt
До сих пор мы рассматривали модули, на базе которых можно именно написать интерфейс. Но есть более удобный (имхо) и профессиональный инструмент для создания GUI — библиотека PyQt. Ее преимущество — совместимость с билдером Qt Designer, который предоставляет набор готовых интерфейсных элементов.

Qt Designer, интерфейс редактора.
Пример работы
Для создания интерфейса достаточно установить PyQt через пакетный менеджер pip, набросать интерфейс в QtDesigner, сохранить его в формате .ui и подключить к программе.
Посмотрим на примере, как написать простой интерфейс и обрабатывать нажатия кнопки (pushButton):
# подключаем необходимые пакеты from PyQt6 import uic from PyQt6.Widgets import QApplications # эта функция срабатывает при нажатии кнопки def hello_world(): print("Hello world") # подключаем файл, полученный в QtDesigner Form, Window = uic.loaduiType("interface.ui") app = QApplication([]) window, form = Window(), Form() form.setupUi(window) window.show() # настраиваем сценарий для элемента pushButton form.pushButton.clicked.connect(hello_world) # запускаем окно программы app.exec()После запуска и клика по кнопке программа напечатает Hello world — проверьте это самостоятельно. Но настоящие преимущества PyQt раскрываются во время разработки сложных интерфейсов.
В своей практике я использовал PyQt для кроссплатформенных GUI под задачи по автоматизации. Яркий пример — конвертер статей из Google-документов на Хабр, о котором я рассказывал в предыдущей статье.

Что нужно учитывать
Встроенных элементов Qt почти всегда было достаточно. Однако иногда могут встречаться объекты, которые некорректно срабатывают. Например — QTextBrowser, который не умеет считывать сложный html-код вроде blockquote.
Главное преимущество PyQt — подробная документация, в которой хорошо описаны все интерфейсные элементы, их параметры и типы данных. Поверьте, для работы с этим фреймворком справочные материалы понадобятся не раз. Но если вам ближе видеоформат, могу смело порекомендовать уроки Олега Шпагина.
PyTouchBar
С 2016 года у некоторых моделей MacBook Pro есть сенсорная OLED-панель. По сути, она просто заменяет функциональные клавиши. Но с ней чуть интересней: на тачбар можно вывести закладки и даже медиаэлементы.
С помощью библиотеки PyTouchBar можно сделать свой интерфейс для тачбара и даже создать игру — без погружения в дебри драйверов и разработки на Swift. О том, как это сделать, мы подробно рассказали в отдельной статье.

Игра с динозавриком Google на тачбаре.
На чем писать gui-программы для debian?
Присматриваюсь к PyQt . Вроде как Qt облегчит создание интерфейса а пайтон прогрессивный язык.
Сложностей и тонкостей не надо, а вот готовые либы были бы кстати.Или я вообще не в ту сторону смотрю??
- Вопрос задан более трёх лет назад
- 1333 просмотра
Комментировать
Решения вопроса 1
Руслан Гильфанов @ri_gilfanov
Web- and desktop-developerPython часто называют «лучшим вторым языком для большинства задач». Написание графических приложений — не исключение. Особенно, если нет задачи защитить исходный код приложения от изучения посторонними.
Библиотек для создания графических приложений много.
- GTK+ 3
- Python GTK+ 3 (зависит от PyGObject) — рекомендую. Во-первых, тулкит Gtk проще в освоении, чем монструозный Qt. Во-вторых, есть приличная по объёму официальная документация для Python (хотя и не полная). Приложений с большим количеством окон и виджетов пока не писал.
- PyQt5 — несколько лет назад пробовал PyQt4 и PyQt5. Для написания чего-то сложнее «Hello world!» надо курить много документации к оригинальному Qt, а изложено там всё в контексте языка C++. Например, пару дней пытался разобраться как обойтись без Qt-шных классов для работы с СУБД (чтобы не извращаться с голым SQL) и подружить Qt-шные виджеты для таблиц с SQLAlchemy — в итоге понял, что Qt не для меня.
- PySide2 — не пробовал. Лучше PyQt5 по части лицензий (есть под LGPL, что позволяет бесплатное использование и в проприентарных проектах) и, если не ошибаюсь, PySide2 лучше дружит с питоновскими типами. В остальном, тот же Qt5.
- wxPython — не пробовал. Говорят проще PySide2 / PyQt5. Однако, тулкит не дотягивает по популярности до GTK+ 3, так что вероятно и инфы по нему меньше. Как я понял, стабильной версии под Python3 до сих пор нет, находится в разработке под названием Phoenix.
- Tkinter — пробовал. Собственно исходный тулкит Tk кажется морально устаревшим. Добиться более-менее приличного оформления приложений затруднительно. Для реализации сложных вещей надо писать заметно больше кода, чем в вышеупомянутых тулкитах.
Ответ написан более трёх лет назад
Нравится 4 7 комментариев
protasovmikhail @protasovmikhail Автор вопросаСкажите а, например, программы сделанные в Python GTK+ 3 или qt5 на выходе чувствительны к окружению?
gnome, kde, xfce ?? Верно думаю что для всего можно сделать не переписывая основной скрипт.

Руслан Гильфанов @ri_gilfanov
Скажите а, например, программы сделанные в Python GTK+ 3 или qt5 на выходе чувствительны к окружению?
gnome, kde, xfce ?? Верно думаю что для всего можно сделать не переписывая основной скрипт.
protasovmikhail, не особо. Это окружение рабочего стола и отдельные приложения зависят от соответствующих библиотек (GTK и Qt). На практике, в одном дистрибутиве рядом часто могут стоять приложения написанные как на GTK, так и на Qt. К тому же, графические приложения можно запускать и вместо окружения рабочего стола (например, те же окна приветствия с вводом логина и пароля запускаются до окружения рабочего стола).
Если приложение на Gtk+ 3 запускается в KDE 5 или приложение на Qt5 запускается в Gnome 3, то основные проблемы обычно связаны с поддержкой тем оформления (цветов, шрифтов, отступов) и пр. И разработчики окружений рабочего стола стараются это исправлять.
По другим окружениям. Cinnamon изначально писался на Gtk+ 3. XFCE недавно перешёл на Gtk+ 3. Mate по-большей части на Gtk+ 3, зависимости от старых версий Gtk в процессе удаления.
Думаю если Вы планируете писать приложения для популярных и современных дистрибутивов Linux, то я не предвижу необходимости как-то менять исходный код, отвечающий за графический интерфейс. У меня один и тот же Python код с вызовами GTK+ 3 работает как в Linux Mint 19.2 (с Cinnamon 4.2.4), в Debian 8 (тонкие клиенты без графического окружения) и в Alt Linux 8.3 (с KDE 5).
В Linux дистрибутивах куда больше различий в системных сервисах, расположении конфигов, правах по-умолчанию, группах пользователей и пр. Вот если ваше приложение будет с ними взаимодействовать, то придётся это учитывать.

Некоторая мешанина из высокоуровневых кроссплатформенных библиотек (Qt / wx) и низкоуровневых, на которых человеку, задающему такие вопросы, лучше вообще не смотреть. Сравнивать wx с GTK вообще странно, поскольку первая под Линукс является оберткой над второй.
protasovmikhail @protasovmikhail Автор вопроса
Менть код этих, Мужиков??
Хех, не дорос пока)
Я имел ввиду мой код ( к их api ? я не разбираюсь в вопросе), придется подправливать под ( api . ) гнома или кеды, а не их код конечно.
Я с ваших слов еще понял что у оболочек есть фишки свои у каждой как бы, по этому на выбор, как говорится.
Руслан Гильфанов @ri_gilfanov
Я имел ввиду мой код ( к их api ? я не разбираюсь в вопросе), придется подправливать под ( api . ) гнома или кеды, а не их код конечно.
protasovmikhail, не думаю, что Вам придётся что-то подправлять под Gnome или KDE.
В Python-обёртке над GTK+ 3 у окон есть методы resize(), maximize(), unmaximize(), fullscreen(), unfullscreen() и другие. Они должны одинаково работать как в KDE, так и в Gnome.

Руслан Гильфанов @ri_gilfanov
Некоторая мешанина из высокоуровневых кроссплатформенных библиотек (Qt / wx) и низкоуровневых, на которых человеку, задающему такие вопросы, лучше вообще не смотреть. Сравнивать wx с GTK вообще странно, поскольку первая под Линукс является оберткой над второй.
Adamos, я дал ссылки на разные инструменты для разработки графических приложений на Python, а так же указал их C/C++ зависимости.
С точки зрения разработчика, что будет писать графические приложения на Python под Debian — знание, что wx в Linux является обёрткой на Gtk конечно хорошо, но куда важнее знание об отсутствии стабильной версии wxPython под Python 3.x и скорое прекращение официальной поддержки Python 2.x.
Касательно уровня абстракции и порога входа. В данном случае ровно наоборот, низкоуровневые решения порой обладают более низким порогом входа и большей свободой кастомизации. Поэтому я и предпочёл Python GTK+ 3, а не PyQt5 или PySide2.

protasovmikhail, Да практически нет. Пишу в основном на PyQt и GTK+3. У меня IceWM и все работает прекрасно.
что нужно знать чтобы писать программы с графическим интерфейсом на Си? [закрыт]
Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 1 год назад .
Проблема такая — изучил основы Си. Написал кое какие программы консольного формата которые ныне решают мои задачи. Но теперь мне понадобилась программа с графическим интерфейсом поскольку меня заинтересовала работа с изображениями, а консоль тут даже отдаленно ничем помочь не может. Интересно именно под linux с использованием xlib : я уже пытался понять с чего начать, но кроме этого ничего вразумляющего не нашел, и даже тут сразу столкнулся с системными переменными. Сразу после этого море вопросов по типу: 1) а что это? 2) а где их брать? 3) а как понять за что какая отвечает? 4) а какие у них есть свойства? и т. д. И как я понимаю это наверняка не единственное что необходимо знать, чтобы писать подобные программы. Прошу тех кто уже занимается подобным — очень нужен какой-нибудь гайд или своего рода roadmap — просто очень многие вещи которые гуглишь на эту тему либо бесполезны(не по теме в итоге) либо есть нужное но для их понимания надо еще что-то знать — как в случае с системными переменными(в том смысле что — а с чего начать изучать эти системные переменные и т. д. Ведь все постигается на практике) Заранее спасибо))