LINUX.ORG.RU

Разработка программы с графическим интерфейсом (советы)

 , , , ,


4

4

Всем привет, ребят. Недавно окончательно переехал с винды на линукс на основной рабочей лошадке. Разработкой никогда не занимался ранее, но скриптовал немного на perl, python и lua. У меня есть задумка небольшой программы с ГУИ, но т.к. в вопросе не имею экспертизы, прошу совета о тех, кто имеет.

Мои хотелки:

  1. Не слишком сложный (низкоуровневый) язык.
  2. Возможность компиляции в один файл. Для меня и для тех, кто будет использовать (устанавливать) это важно. Одна из причин, почему не хочу использовать тот же python.
  3. Простая кроссплатформенность разработки (линукс и винда).
  4. Наверное максимальная независимость от сторонних библиотек, чтобы не попасть в неприятную ситуацию.
  5. Удобная разработка на линуксе. На винде буду только пересобирать, если это потребуется, и тестировать.

Программа сама по себе, наверное, несложная… В основном это заполнение форм различными данными (текст, цифры), вычисление формул, хранение данных в какой-нибудь sqlite или на худой конец в csv файле, построение и отображение графиков и таблиц с удобным редактированием и занесением данных.

Т. к. это мое первое, а возможно и единственное программное детище, хочу подойти максимально педантично к разработке. Поэтому хочется все вылизать: минимум жручих фреймворков, максимум простоты, красоты, скорости работы и живучести в плане обновления всяких версий.

Дайте, пожалуйста, ваши рекомендации по языку и, возможно, фреймворку.

Читаю сам информацию в интернете. Насколько я могу судить по прочитанному, мне возможно подойдет С++ с фреймворком Qt. На форуме тоже видел одну или две темы, где такую связку советовали.

Да, к слову, с вебом и веб технологиями связываться вообще не хочу.

Система Linux Mint 21.3.

Бери культи, по требованиям подходят, но на счет компиляции в один файл придется разобраться ибо кроме кода у тебя вероятно будут ещё и ресурсы (картинки, конфиги и т.п).

ya-betmen ★★★★★
()

Lazarus, на windows будет использовать winapi, на linux gtk или qt. По сравнению с Qt он легче, и проще, виджеты таблиц и графиков там есть. Работа с БД тоже.

В один файл можно собрать любое приложение, даже на питоне. Этим занимаются сторонние программы упаковщики.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)

Вставлю в тему небольшое наблюдение: искал недавно какой-нибудь шустрый, но симпатичный редактор / вьювер маркдауна, чтоб под винду и линекс. Под линексом всё вменяемое это Qt и Electron, под винду тоже Qt и Electron, ну и еще какой-то требовал runtime от Edge.

Так что выбирать по сути не из чего.

fumanchez
()

Tcl же!

  1. Высокоуровневый. Относительно несложный.

  2. Есть возможность завернуть вcё в один исполняемый файл через starpack.

  3. Кроссплатформенный. Есть и Винда и Линукс.

  4. Много библиотек внутри, в том числе и ГУЙ.

  5. Хочешь пиши на Линуксе. Хочешь на винде.

anonymous
()

Возможность компиляции в один файл. Для меня и для тех, кто будет использовать (устанавливать) это важно. Одна из причин, почему не хочу использовать тот же python.

Наверное максимальная независимость от сторонних библиотек, чтобы не попасть в неприятную ситуацию.

Про компиляцию Qt/GTK в один файл, который будет работать на любом Linux можно забыть. Можно взять qt5, gtk3, скомпилировать в старом-старом дистре (чей срок LTS поддержки заканчивается на днях). И большую часть дистрибутивов покроешь. Эти библиотеки используют много других, да и рантайм Си/С++ будет тянуть назад.

  • Qt - главный плюс море книг, минус - наследие старого С++.
  • GTK - с gtkmm намного проще писать, но вот объём документации и примеров близок к нулю. Без хорошего опыта в С++ и разборе чужих исходников будет тяжко.
  • wxWidgets (и т.п. обёртки) - что-то среднее. Есть немного литературы/примеров, а код не такой деревянный.

Если хочешь что-то по свежее, то надо будет упаковывать в AppImage. В этом случае, можно просто разрабатывать в любимом дистре. B долбиться при сборке пакета для Win/AppImage отдельно.

Со статикой неплохо собирается FLTK. Есть расширения на Rust, которые его немного причёсывают. Годится сея пара для простого приложения с парой кнопок, полей ввода и выводом графиков. Опять же, скопилил на старом дистре (из-за Си рантайма) и в путь. Сходу компилится из Linux под оффтопик.

webkit2gtk/WebView2 - компонент для встраивания Web браузера в приложение. Есть почти везде. Чем пользуются Tauri и т.п.

Java/Swing, все остальное фуфло.

А это просто сплюсую. Работает везде и один файл.

AlexVR ★★★★★
()

Насколько я могу судить по прочитанному, мне возможно подойдет С++ с фреймворком Qt.

Да, отличный инструментарий.

Выше советовали паскаль с лазарусом… Ничего плохого сказать не могу, паскаль вообще прекрасный прикладной язык. Но: если ты рассчитываешь под все архитектуры делать сборки сам, это одно. А если рассчитываешь найти мейнтейнеров в разных дистрибутивах — то здесь экзотические по нынешним временам ЯП и библиотеки могут стать преградой.

Исходники открывать планируешь?

Т. к. это мое первое, а возможно и единственное программное детище

Нет-нет, ты попробуешь, тебе понравится, а потом затянет окончательно.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

Разработкой никогда не занимался ранее, но скриптовал немного на perl, python и lua. У меня есть задумка небольшой программы с ГУИ, но т.к. в вопросе не имею экспертизы, прошу совета о тех, кто имеет.

внезапно, попробуй RED – компилируемый REBOL:

In the following example the Visual interface dialect is used to describe a simple Hello world program with a graphical user interface:

view layout [text "Hello world!" button "Quit" [quit]]

хелловорд – окошко с кнопкой.

ещё примеров (RED):

view [text "Hello World!"]
view [name: field button "Hi" [print ["Hi" name/text]]]
view [
        text-list data collect [
            foreach event load https://api.github.com/repos/red/red/commits [
                keep event/commit/message
            ]
        ]
    ]

и далее см. например в репозитории: vid.adoc

Showcase

есть довольно интересные, например reactive programming livecode eve-clock.red

getting-started-with-gui-programming-using-red-programming-language

REBOL – гомоиконный (код==данные и наоборот) скриптовый интерпретируемый язык, довольно фичастый (42 стандартных типа данных, например, «сайт», «email», «дата», «файл», «кортеж» и т.п.)

придуман Карлом Сассенратом в середине 1990х при программировании под Amiga. далее он пытался продавать, коммерциализировать (например, REBOL/iOS и прочие SDK).

затем открыли исходники R3 и появился REBOL3.

Rebol crash course

Learn REBOL

ещё см. red-by-example

на REBOL2 был написан компилятор RED.

why_rebol_red_and_the_parse_dialect_are_cool

RED – это самодостаточный тулчейн для компилируемого языка (написан на самом себе и линкер, и интерпретатор и компилятор):

  • Red/System – низкоуровневый диалект, сравнимый по возможностям и производительности с Си

  • прочие диалекты поверх, например, PARSE, VID, Draw и т.п.

red-parse-tutorial

тулчейн кроссплатформенный, можно из одной ОС компилировать под другие.

и RED и REBOL3 легко встраиваются в/из программы на Си.

anonymous
()

скриптовал немного на perl, python, lua

внезапно, есть такая штука как Parde IDE – IDE на Perl, wxWindows.

там есть примеры как написать GUI и/или писать плагины и расширять эту IDE на самом Perl.

на Lua есть например lua carousel для LOVE или teliva: Why everyone needs to know some coding: last-mile sandboxing

Fork of Lua 5.1 to encourage end-user programming

можно в эту сторону подумать, какого-то 2D/GUI движка или того же IUP.

кстати, есть такая штука как Euphoria wiki сайт

и например, такой её форк как Phix gh.com/petelomax/Phix tutorial examples PCAN PCAN.GUI

см. также rosetta code/category:phix

Эйфория в любом виде (RDS,OpenEuphoria,Phix) немного напоминает Lua или Squirrel:

простой интерпретируемый язык с очень быстрым интерпретатором и прозрачной встраиваемостью в/из Cи.

Phix, например,

It recompiles itself four times, to ensure everything is still working, before overwriting/damaging anything.

за 8 секунд

при этом можно вызвать например ассемблер или линковаться с си.

сам язык очень прост, почти как луа (только без метатаблиц).

ещё есть SMALL/PAWN

PAWN pawnprojects

Pike [habr:330638](https://habr.com/ru/articles/330638/ Pike.FAQ

— разновидности интерпретируемого Си.

например, есть Mud клиент на Pike и GTK: gh.com/Rosuav/Gypsum

gypsum.pike, window.pike – показывают как сделать GUI на GTK2

среди модулей готовых из коробки например GTK, GTK2, SDL, GL, GLUT и прочие

ну и интернет протоколы Pike естественно, тоже поддерживает все одной командой

например, в Gypsum МUD клиент на GTK работает поверх telnet протокола (хотя тут похоже, разбор connection.pike делают из сокетов вручную)

довольно функциональные модули есть уже готовые из коробки для Pike, да и привязки к Си делаются несложно.

в общем, можно взять например tkinter для Python, wxPython (Python/wxWidgets), Perl/wxWidgets, Lua/…/everything, Phix/…/everything

и ковырять на тему привязок к конкретной GUI библиотеке

либо сразу SDL, Nuklear, IUP и т.п. и делать «кроссплатформный GUI» поверх подобных «игровых» библиотек

anonymous
()
Ответ на: комментарий от anonymous

в общем, возьми по вкусу:

  • Pike, Pawn и прочие разновидности «интерпретируемого Си»

** V language, внезапно

  • Lua, Euphoria (Phix) или ещё какую человекочитаемую скриптоту

  • RED если хочется минимализма

и набросай своё приложение, сначала из прототипа в виде скриптоты

затем заменяй модули и библиотеки

и двигайся в сторону «компилируемого» Си, а не интерпретируемого.

anonymous
()

Tcl/Tk. Выглядит старомодно, но для освоения очень прост и для программирования очень удобен. По умолчанию скриптовый, но в один exe можно с помощью tclkit собрать в starpack (https://wiki.tcl-lang.org/page/Starpack). При этом собирать можно и для винды под линуксом.

TeopeTuK ★★★★★
()
Ответ на: комментарий от AlexVR

Через XWayland наверняка работает, а нативно под Wayland вряд ли. ТС не хочет сношаться с поддержкой, вот я и думаю, нужен ему Swing или ну его в пень. И вообще, разве Swing не abandonware?

anonymous
()

Недавно обнаружил, что можно достаточно легко писать для GTK3 или GTK4 нативные (двоичные) приложения на Common Lisp: https://github.com/crategus/cl-cffi-gtk3 и https://github.com/crategus/cl-cffi-gtk4, соответственно. Это тонкие прослойки, которые почти сразу ведут к коду соответствующих библиотек. Для небольшой логики с GUI получается на выходе всего один исполняемый файл размером мегабайт 13-15 (для SBCL).

Что касается самого лиспа, то если он является незнакомым для вас, или если не особо разбирающийся препод в вузе [1] вас изрядно помучал этим лиспом, то есть прекрасное введение в лисп «Practical Common Lisp»: https://gigamonkeys.com/book.

У книги есть перевод на русский. Продается на Озоне.

Из реализаций советую взять SBCL: https://sbcl.org/

[1] Ага, типа странного Столярова, который почему-то упрямо ставит скобки чужеродно, и почему-то упрямо называет компиляторы «интерпретаторами» - что за фикс-идея у него?

anonymous
()
Ответ на: комментарий от TeopeTuK

Дык можно тогда уже и питон с Tkinter взять. Под виной Tkinter идёт в питоне из коробки. Приложение действительно получается кроссплатформенным.

Кстати PyQt5 со своим плюсовым фрагментом кода мне кросскомпилировать под винду не удалось - под вайном взлетело, под виндой нет. А с ткинтер всегда все работало.

AntonI ★★★★★
()

.NET/c#/Avalonia UI

По хотелкам:

  1. Язык проще некуда
  2. Native AOT
  3. Судя по описанию функционала, платформо-специфический код вообще не понадобится
  4. Кроме .NET и Avalonia ничего не нужно, а они сомнительно что помрут
  5. Rider
arax ★★
()
Ответ на: комментарий от AntonI

Дык можно тогда уже и питон с Tkinter взять

PySimpleGUI во многом проще и удобнее и выглядит лучше (чем Tkinter по умолчанию без дополнительных тем), хотя и базируется на том же Tkinter.

anonymous
()

Возможность компиляции в один файл

Tweaks в гноме - это приложение, полностью написанное на питоне. Ты можешь что угодно в один файл засунуть… Но это неудобно с точки зрения кастомизации. В том же QT https://doc.qt.io/qt-5/resources.html все ассеты можно в бинарник засунуть. Ага. Если не нужны пользовательские темы, иконочки, не хочешь давать возможность юзеру поправить внешний вид, отредактировав CSS (ага, стили в GTK и QT приложениях задаются как в HTML).

Насколько я могу судить по прочитанному, мне возможно подойдет С++ с фреймворком Qt.

На QML можно и без знания C++ приложение сварганить, если оно у тебя представляет собой фронтенд к какому-то API либо парсит выхлоп какой-нить консольной утилиты - гуи ко всяким iptables никогда актуальность не потеряют

У питона и ноды плюс как раз в том, что дистрибуция кроссплатформенная. Ты приложение просто ставишь через pip/npm и не трахаешься с прописыванием репозиториев, если конечно автор типа тебя удосужится хотя бы сборку .deb сделать, а не выложит свою дрисню на гитхабе, напейсав три команды для ее коНпеляции. Если ты это планируешь, то лучше ничего и не пиши

rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 3)
Ответ на: комментарий от Shushundr

Почему именно Swing, а неJavaFX?

Оно кривовато: надо указывать модули при старте java в качестве аргумента, графики там норм, таблицы так себе. Если на swing пишуются продукты idea, то на javafx я вспомнить не могу приложений подобного масштаба.

В целом же я бы смотрел в сторону acsess или lo base, как морд для бд.

Ygor ★★★★★
()

Ну, мой личный выбор в итоге за связкой Си++ и wxwidgets.

...с вебом и веб технологиями связываться вообще не хочу.

И это правильно.

sparkie ★★★★★
()
Ответ на: комментарий от anonymous

внезапно, есть такая штука как Parde IDE – IDE на Perl, wxWindows

Любопытно, даже в глаза не видел эту среду разработки, но по памяти сразу заметил, что в названии ошибка; проверил – и правда, правильно «Padre IDE».

Virtuos86 ★★★★★
()

Хочешь приложение написать с GUI? Не вопрос. Главное - не использовать ninja и прочую хрень. Я пишу в gtk, многие «спецы» на смех подымут, но у меня всё нормально работает. Разобрался с косяками программ. Ответа на форуме мне никто не дал. Qt сразу не рекомендую: тянет за собой километровые библиотеки. Если нужна помощь, обращайся. Что-нибудь сварганишь:)

saidu
()
Ответ на: комментарий от anonymous

Поддержу анонимуса. Мало того, что он кроссплатформенный, он отлично работает вообще на любых старых операционках, от хр до 10. Недавно на онтопике запустил прогу написанную более 20 лет назад, прицепив к ней современную тему оформления.

einhander ★★★★★
()

Qt/C++ — наиболее универсальный вариант. Компилируется вообще куда угодно, вплоть до мобильных ОС или систем с количеством пользователей, стремящимся к нулю. Код довольно прост, и пусть есть мнение в кругах новичков, мол, плюсы это сложно, с Qt вообще никакой низкоуровневщины писать не надо. Разработка идёт быстро, документация хороша, волосы лоснящиеся и шелковистые.

ad0c
()
Ответ на: комментарий от sergej

С авалонией дотнетить под линукс как раз вполне норм. Только надо примерно как в WPF уметь в разметки-привязки-стили и распиливание на MVVM примерно сразу, а то можно обнаружить нечитаемую и несопровождабельную простыню кода, накрытую простыней разметки, оставленную предшественником, поправить что-то в которой просто не захочется.

slackwarrior ★★★★★
()