Gui linux на чем писать
Перейти к содержимому

Gui linux на чем писать

  • автор:

Что выбрать для написания 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

    Руслан Гильфанов @ri_gilfanov
    Web- and desktop-developer

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

    Библиотек для создания графических приложений много.

    • 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

      Руслан Гильфанов @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 дистрибутивах куда больше различий в системных сервисах, расположении конфигов, правах по-умолчанию, группах пользователей и пр. Вот если ваше приложение будет с ними взаимодействовать, то придётся это учитывать.

      Adamos

      Некоторая мешанина из высокоуровневых кроссплатформенных библиотек (Qt / wx) и низкоуровневых, на которых человеку, задающему такие вопросы, лучше вообще не смотреть. Сравнивать wx с GTK вообще странно, поскольку первая под Линукс является оберткой над второй.

      protasovmikhail @protasovmikhail Автор вопроса

      Менть код этих, Мужиков??

      Хех, не дорос пока)
      Я имел ввиду мой код ( к их api ? я не разбираюсь в вопросе), придется подправливать под ( api . ) гнома или кеды, а не их код конечно.
      Я с ваших слов еще понял что у оболочек есть фишки свои у каждой как бы, по этому на выбор, как говорится.

      ri_gilfanov

      Руслан Гильфанов @ri_gilfanov

      Я имел ввиду мой код ( к их api ? я не разбираюсь в вопросе), придется подправливать под ( api . ) гнома или кеды, а не их код конечно.

      protasovmikhail, не думаю, что Вам придётся что-то подправлять под Gnome или KDE.

      В Python-обёртке над GTK+ 3 у окон есть методы resize(), maximize(), unmaximize(), fullscreen(), unfullscreen() и другие. Они должны одинаково работать как в KDE, так и в Gnome.

      ri_gilfanov

      Руслан Гильфанов @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.

      delvin-fil

      protasovmikhail, Да практически нет. Пишу в основном на PyQt и GTK+3. У меня IceWM и все работает прекрасно.

      что нужно знать чтобы писать программы с графическим интерфейсом на Си? [закрыт]

      Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

      Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

      Закрыт 1 год назад .

      Проблема такая — изучил основы Си. Написал кое какие программы консольного формата которые ныне решают мои задачи. Но теперь мне понадобилась программа с графическим интерфейсом поскольку меня заинтересовала работа с изображениями, а консоль тут даже отдаленно ничем помочь не может. Интересно именно под linux с использованием xlib : я уже пытался понять с чего начать, но кроме этого ничего вразумляющего не нашел, и даже тут сразу столкнулся с системными переменными. Сразу после этого море вопросов по типу: 1) а что это? 2) а где их брать? 3) а как понять за что какая отвечает? 4) а какие у них есть свойства? и т. д. И как я понимаю это наверняка не единственное что необходимо знать, чтобы писать подобные программы. Прошу тех кто уже занимается подобным — очень нужен какой-нибудь гайд или своего рода roadmap — просто очень многие вещи которые гуглишь на эту тему либо бесполезны(не по теме в итоге) либо есть нужное но для их понимания надо еще что-то знать — как в случае с системными переменными(в том смысле что — а с чего начать изучать эти системные переменные и т. д. Ведь все постигается на практике) Заранее спасибо))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *