Содержание

На чем лучше и быстрее написать GUI приложение? — Хабр Q&A

Не слушайте тех, кто Delphi рекомендуют.
1.Оно не развивается (юникод в 2010(или 2009) году только добавили!).
2.Оно таки мало того, что проприетарное, так еще и платное!

Насчет С++, то ни в коем случае не пробуйте юзать Visual Studio и всякие извращения типа MFC, только мозг вынесете себе и возненавидите плюсы, от которых там по правде говоря только название.

Что остается?
Nokia Qt, причем можно как на C++ кодить, так и на любимых ruby,python.
C# WPF, тут уж за меня все расскажут.

Остальное не стоит внимания, имхо.

Ответ написан

А почему через web нельзя всё реализовать? Кроссплатформенность будет и везде доступно))

Ответ написан

2010, в 04:31″> более трёх лет назад

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

C# гораздо проще и развивается куда динамичнее чем C++. Хотя почитать Рихтера со временем все равно стоит, так как простые и лаконичные куски кода на C# иногда оказываются чудовищно неэффективными.

Ответ написан

Комментировать

Лично мне сложно представить себе что-то удобнее и проще C# WinForms. Если задача стоит действительно «здесь и сейчас», то, imho, надо выбирать этот вариант. Если учиться на перспективу с целью научиться чему-то новому и интересному, я бы выбрал WPF. Со стратегической точки зрения наверно правильнее всего освоить какой-нибудь хороший Javascript UI toolkit и делать всё на web-интерфейсах.

Ответ написан

более трёх лет назад

Если нужно быстро написать:
То C# плюс WPF.

А если время для разработки есть, плюс желание — то Питон, либо Руби можно попробовать)

Ответ написан

Комментировать

Если у вас стоит задача написать простую программку, и при это вам хотелось бы изучить что-то новое и вы знаете Ruby, то я бы посоветовал попробовать IronRuby — это возможность писать приложение на знакомом уже вам языке, но при этом познакомиться с мощью платформы .

Net.

Ответ написан

Можно конечно начать учить Java, C# или C++, но это на мой взгляд будет слишком трудозатратно для такой задачи.

Ответ написан

Комментировать

Мой выбор: Nokia Qt. Сейчас этот фреймворк очень сильно вырос и позволяет просто делать сложные вещи.

Ответ написан

Просто интересно, почему вы не рассматриваете тот же Delphi как кандидата? По крайней мере в тексте вопроса я не нашел прямых противопоказаний. Единственное ограничение, мультиплатформенность. Но под тем же Linux несложноя дельфевая программа под Wine пойдет без проблем.

Ответ написан

Комментировать

Каждый кулик хвалит свое болото 🙂

Если надо быстро и хорошо надо использоваться готовый framework. Тормозить может все, если его накормить «фантой». В вашем случае qt, думаю, будет лучшим выбором.

Ответ написан

более трёх лет назад

Комментировать

Delphi?
Java (SWT)?
dotNet (любой язык из семейства, какой ближе)?

Ответ написан

Зависит от задачи: если Вам нужно просто быстро написать приложение — нужно взять знакомый инструмент, который Вы уже знаете, т.е. Дельфи. Если изучить что-то новое, то Питон, думаю, будет вполне хорошим вариантом, т.к. на нем можно и десктопные приложения писать и как серверный вариант использовтаь, т.е. приобретенный опыт будет весьма полезным.

Ответ написан

Всё зависит от целей разработки: Если нужно дёшево и сердито, то
Писать стоит на том, что лучше всего знаешь для целевой платформы, или что быстрее всего можно выучить. Для винды с установленным офисом — MS Access — всё в одном файле, при желании можно и к SQL серверу клиент подключить или к файл-серверу, можно распространять как один файл в виде приложения для Access Runtime — без установки самого Аксеса.


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

Ответ написан

Не очень давно нечто подобное спрашивал На чем написать програмку?

Ответ написан

Комментировать

Универсальный GUI / Хабр

Здравствуйте! Меня зовут Халитов Кирилл, я аспирант из МГУДТ (Московский государственный университет дизайна и технологии (МГУДТ) ). В моей диссертации возникла задача упростить процесс создания интерфейса для локального и веб-приложения и в итоге получился сабж.

Введение

В настоящее время любая современная мониторинговая система включает в себя прикладное программное обеспечение (ПО) для визуализации данных. Как правило, запуск этого ПО предполагает наличие рекомендуемой операционной системы (ОС), в большинстве своих случаев ОС компании Microsoft. Однако сейчас наблюдается тенденция использования кроссплатформенных средств для разработки ПО. В результате этого появляется возможность запуска готового программного продукта на разных ОС, включая и мобильные ОС.

Кроме того, в связи с бурным распространением интернета популярным направлением разработки ПО стала разработка веб-приложений или веб-сервисов. Веб-приложение является полезным дополнением к клиентской прикладной программе (приложению). Обычно веб-приложение даёт возможность удалённого использования мониторинговой системы. Это означает, что пользователь не привязан к месту расположения аппаратной части мониторинговой системы и может использовать её из любой точки мира, где есть рекомендуемое интернет-соединение.

Важно заметить, что разработка веб-приложений в значительной степени отличается от разработки клиентских приложений и это в свою очередь создаёт некоторые проблемы. В частности, это проблема создания универсального графического интерфейса пользователя (GUI). Чтобы клиентское приложение и веб-приложение были реализованы в едином графическом стиле, необходимо приложить достаточно усилий как разработчику интерфейса клиентского приложения, так и разработчику интерфейса веб-приложения. В конечном счёте величина усилий одного или другого разработчика будет зависеть от того, интерфейс какого приложения будет задавать общий стиль.

Современные способы построения интерфейсов

Рассмотрим наиболее популярные в настоящий момент способы построения интерфейсов клиентских приложений на языке C++, как наиболее используемом для разработки ПО, для ОС Microsoft Windows (MS Windows) и ОС Linux. Главным средством разработки ПО для MS Windows является MS Visual Studio [1]. Эта интегрированная среда разработки (IDE) позволяет разрабатывать ПО на разных языках программирования, но основными языками, конечно, являются C++ и C#. Для разработки интерфейса приложения имеются два основных средства — Windows Forms (WinForms) и Windows Presentation Foundation (WPF). Большая часть существующих приложений для MS Windows разработана с использованием WinForms, однако с появлением более современных версий ОС (MS Windows 7, 8), система WPF становится более популярной. Кроме того, последние версии MS Visual Studio позволяют использовать язык разметки HTML5 для построения интерфейсов, близких по стилю к нативным веб-приложениям. Однако стоит заметить, что коммерческая лицензия MS Visual Studio является платной, как и лицензия MS Windows, что несомненно является недостатком для низкобюджетных проектах.

Если говорить о низкобюджетных проектах, то тут наиболее подходящим вариантом является ОС Linux. Помимо того, что большинство дистрибутивов этой ОС являются абсолютно бесплатными, в том числе и для коммерческого использования, также имеется ряд бесплатных средств для разработки качественного ПО для ОС Linux. Самым распространённым средством для разработки ПО на языке С++ является кроссплатформенный инструментарий Qt [2]. Важно подчеркнуть, что Qt позволяет разрабатывать приложения не только для ОС Linux, но и для MS Windows, Mac OS X, Android и других UNIX-подобных ОС. Разработчики Qt предлагают как бесплатную для коммерческого использования, так и платную лицензию с дополнительными возможностями. Но исходя из современной практики разработки ПО с помощью этого инструментария, бесплатной лицензии оказывается больше чем достаточно.

Если проводить аналогию с MS Visual Studio, то в Qt мы имеем IDE Qt Creator. Здесь альтернативой WinForms являются так называемые виджеты (Qt Widgets), а альтернатива для WPF — Qt Quick. Также в Qt Creator имеется возможность создания интерфейсов на основе HTML5. Но наиболее интересным модулем инструментария является встраиваемый веб-движок WebKit, который лежит в основе всех современных веб-браузеров. Подобный модуль имеется и в MS Visual Studio, но он имеет ряд ограничений, и тем более нас больше интересуют низкобюджетные средства, которые позволяют уменьшить издержки при создания программного продукта. Веб-движок — это ядро браузера, он отвечает за правильное отображения веб-страниц. Модуль Qt WebKit позволяет создавать интерфейс клиентского приложения с использованием техники разработки интерфейсов веб-приложений. В основе создания интерфейса веб-приложения лежит устоявшийся стек технологий. Он включает язык разметки HTML (HTML 4, 5), каскадные таблицы стилей (CSS 2, 3) и скриптовый язык JavaScript с богатым выбором дополнительных библиотек (каркасов). Отдельного внимания заслуживает тот факт, что скорость появления новых полезных каркасов для языка JavaScript стремительно растёт, а это делает разработку, насыщенных функционалом приложений, более быстрой и удобной.

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

Традиционный способ: Qt WebKit + Qt-костыли

Рассмотрим традиционный способ создания универсального GUI с помощью модуля Qt WebKit на примере модуля визуализации данных системы акустического мониторинга, разрабатываемой в рамках кандидатской диссертационной работы [3]. Под системой акустического мониторинга подразумевается система, включающая аппаратную и программную части. Аппаратная часть системы состоит из сенсорной сети акустических датчиков, данные с которых обрабатываются на микроконтроллере и отправляются по какому-либо интерфейсу (UART, IEEE 802.X и др.) на персональный компьютер (ПК). Программная часть состоит из набора прикладных программ, работающих как на локальном ПК (клиентское ПО), так и на удалённом сервере (серверное ПО).

Традиционный метод подразумевает использование межпроцессного


Рис. 1. Традиционный метод реализации универсального GUI

взаимодействия по средствам встроенного механизма Qt. Здесь подразумевается взаимодействие между основной логикой клиентского приложения, изображённой на рис.1 как Обработчик данных, и GUI-элементом. Одним из недостатков такого подхода является то, что код для реализации GUI на языке JavaScript будет иметь специфические функции, которые будут актуальны только для клиентского Qt-приложения. Для серверного приложения, отвечающего за GUI, нужен будет другой, специфичный для серверной реализации, код. Например, в случае использования PHP-скрипта для реализации основной логики серверного приложения, понадобится реализация межпроцессного взаимодействия с помощью какой-либо другой технологии (AJAX или WebSocket). Отсюда следует ещё один недостаток, а именно использование дополнительного языка программирования для реализации основной логики серверного приложения и разработка нового алгоритма межпроцессного взаимодействия.

Более интересный подход: Qt WebKit + WebSocket

Для решения этих проблем предлагается новый метод, основанный на использования упомянутой выше технологии WebSocket. Суть метода заключается в том, чтобы унифицировать метод межпроцессного взаимодействия между основной логикой приложения и GUI, как на клиентской стороне, так и на серверной. В этом случае появляется возможность использования JavaScript кода для реализации универсального для обеих сторон GUI.


Рис. 2. Новый метод реализации универсального GUI

На рис. 2. видно, что теперь для межпроцессного взаимодействия, как для клиентской, так и для серверной части используется технология WebSocket. То есть теперь мы имеем один универсальный JavaScript код для разных приложений. В этом случае необходимым условием является серверное приложение, основная логика которого реализована с помощью Qt, на не совсем привычном для веб-разработчиков, языке C++. С одной стороны такой подход к реализации серверного приложения усложняет задачу для узкоспециализированного веб-разработчика. Но с другой стороны мы имеем универсальные части кода, которые позволяют нам сэкономить время на дублировании одних и тех по смыслу алгоритмов на разных языках. Важно также подчеркнуть, что для использования технологии WebSocket необходима дополнительная библиотека, которая имеется в интернете в свободном доступе или включается по умолчанию в более поздние версии Qt.


Рис. 3. Локальное (справа) и серверное (слева) приложения, запущенные на ОС Ubuntu 14. 04

На рис. 3 приведён пример реализации нового метода создания универсального GUI для ОС Ubuntu 14.04. Как видно на рисунке, в конечном итоге мы получаем универсальный интерфейс, как для локального приложения, запущенного в качестве исполняемого файла ОС, так и для серверного приложения, запущенного в современном веб-браузере. Так как для разработки ПО используются кроссплатформенные инструменты, это позволяет говорить о простой переносимости программного продукта на другие ОС в будущем.

Список литературы

1. Qt Documentation [Электронный ресурс]. Режим доступа: qt-project.org/doc
2. Visual Studio Library [Электронный ресурс]. Режим доступа: msdn.microsoft.com/en-us/library/vstudio
3. Молодые учёные – развитию текстильно-промышленного кластера (ПОИСК — 2014): сборник материалов межвузовской научно-технической конференции аспирантов и студентов с международным участием. Ч. 2. – Иваново: Иванов. гос. политехн. Ун-т, 2014. — С. 25 [Электронный ресурс]. Режим доступа: ti.ivgpu.com/poisk/file/part_2.pdf

P.S. Единственное, что на картинке бросается в глаза — это разные шрифты, но мне, честно говоря, тогда было не до них.

P.P.S. Можно ли запатентовать этот способ, чтобы на защите было чем козырнуть кроме свидетельства о регистрации ПО?

Запуск приложений графического пользовательского интерфейса Linux с помощью WSL

  • Статья
  • Чтение занимает 3 мин

подсистема Windows для Linux (WSL) теперь поддерживает запуск приложений графического пользовательского интерфейса Linux (X11 и Wayland) в Windows в полностью интегрированном интерфейсе рабочего стола.

WSL 2 позволяет приложениям графического интерфейса Linux чувствовать себя собственными и естественными для использования в Windows.

  • Запуск приложений Linux из меню «Пуск» Windows
  • Закрепление приложений Linux на панели задач Windows
  • Переключение между приложениями Linux и Windows с помощью alt-tab
  • Вырезать и вставить в приложениях Windows и Linux

Теперь вы можете интегрировать приложения Windows и Linux в рабочий процесс для эффективного рабочего стола.

Установка поддержки приложений графического пользовательского интерфейса Linux

Предварительные требования

  • Для доступа к этой функции потребуется Windows 11 сборке 22000 или более поздней версии.

  • Установленный драйвер для VGPU

    Чтобы запустить приложения графического пользовательского интерфейса Linux, необходимо сначала установить драйвер, соответствующий вашей системе ниже. Это позволит использовать виртуальный GPU (vGPU), чтобы воспользоваться преимуществами аппаратного ускорения отрисовки OpenGL.

    • Intel Драйвер GPU для WSL
    • AMD Драйвер GPU для WSL
    • NVIDIA Драйвер GPU для WSL

Новая установка — нет предыдущей установки WSL

Теперь вы можете установить все необходимое для запуска подсистемы Windows для Linux (WSL), введя эту команду в PowerShell от имени администратора или командной строке Windows, а затем перезапустив компьютер.

wsl --install

После завершения перезагрузки компьютера установка продолжится, и вам будет предложено ввести имя пользователя и пароль. Это будут ваши учетные данные Linux для дистрибутива Ubuntu.

Теперь вы готовы приступить к использованию приложений графического пользовательского интерфейса Linux в WSL!

Дополнительные сведения см. в статье об установке WSL.

Существующая установка WSL

Если на компьютере уже установлен WSL, можно обновить до последней версии, которая включает поддержку графического пользовательского интерфейса Linux, выполнив команду обновления из командной строки с повышенными привилегиями.

  1. Выберите «Пуск», введите PowerShell, щелкните правой кнопкой мыши Windows PowerShell и выберите «Запуск от имени администратора«.

  2. Введите команду обновления WSL:

    wsl --update
    
  3. Чтобы обновление вступило в силу, необходимо перезапустить WSL. Вы можете перезапустить WSL, выполнив команду завершения работы в PowerShell.

    wsl --shutdown
    

Примечание

Приложения графического пользовательского интерфейса Linux поддерживаются только с WSL 2 и не будут работать с дистрибутивом Linux, настроенным для WSL 1. Узнайте , как изменить распределение с WSL 1 на WSL 2.

Запуск приложений с графическим пользовательским интерфейсом Linux

Чтобы скачать и установить эти популярные приложения Linux, можно выполнить следующие команды из терминала Linux. Если вы используете дистрибутив, отличный от Ubuntu, он может использовать другой диспетчер пакетов, отличный от apt. После установки приложения Linux его можно найти в меню «Пуск » под именем дистрибутива. Например: Ubuntu -> Microsoft Edge.

Примечание

Поддержка приложений графического пользовательского интерфейса в WSL не обеспечивает полнофункциональный интерфейс рабочего стола. Он использует классический компьютер Windows, поэтому установка средств или приложений, ориентированных на настольные компьютеры, может не поддерживаться. Чтобы запросить дополнительную поддержку, можно отправить проблему в репозитории WSLg на GitHub.

Обновление пакетов в дистрибутиве

sudo apt update

Установка Gedit

Gedit — это текстовый редактор по умолчанию в классической среде JSON.

sudo apt install gedit -y

Чтобы запустить файл bashrc в редакторе, введите: gedit ~/.bashrc

Установка GIMP

GIMP — это бесплатный и растровый графический редактор с открытым кодом, используемый для обработки изображений и редактирования изображений, рисования свободной формы, перекодирования между различными форматами файлов изображений и более специализированными задачами.

sudo apt install gimp -y

Чтобы запустить, введите: gimp

Установка Nautilus

Nautilus, также известный как ФАЙЛЫ GNOME, является диспетчером файлов для рабочего стола GPU. (Аналогично Windows проводник).

sudo apt install nautilus -y

Чтобы запустить, введите: nautilus

Установка VLC

VLC — это бесплатный и открытый код кроссплатформенный мультимедийный проигрыватель и платформа, которая воспроизводит большинство мультимедийных файлов.

sudo apt install vlc -y

Чтобы запустить, введите: vlc

Установка приложений X11

X11 — это система окон Linux, и это разное семейство приложений и инструментов, которые поставляются с ним, например xclock, xcalc calculator, xclipboard для вырезания и вставки, xev для тестирования событий и т. д. Дополнительные сведения см. в x.org документации .

sudo apt install x11-apps -y

Чтобы запустить, введите имя средства, который вы хотите использовать. Пример:

  • xcalc, xclock, xeyes

Установка Google Chrome для Linux

Чтобы установить Google Chrome для Linux, выполните следующие действия.

  1. Измените каталоги в папку temp: cd /tmp
  2. Используйте wget для скачивания: sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  3. Получите текущую стабильную версию: sudo dpkg -i google-chrome-stable_current_amd64.deb
  4. Исправление пакета: sudo apt install --fix-broken -y
  5. Настройте пакет: sudo dpkg -i google-chrome-stable_current_amd64.deb

Чтобы запустить, введите: google-chrome

Установка Microsoft Teams для Linux

Чтобы установить Microsoft Teams для Linux, выполните следующее:

  1. Измените каталоги в папку temp: cd /tmp
  2. Используйте curl для скачивания пакета: sudo curl -L -o ". /teams.deb" "https://teams.microsoft.com/downloads/desktopurl?env=production&plat=linux&arch=x64&download=true&linuxArchiveType=deb"
  3. Используйте apt для установки: sudo apt install ./teams.deb -y

Чтобы запустить, введите: teams

Установка браузера Microsoft Edge для Linux

Сведения об установке браузера Microsoft Edge для Linux с помощью командной строки на сайте предварительной оценки Edge. Выберите » Получить инструкции» в разделе установки командной строки на странице.

Чтобы запустить, введите: microsoft-edge

Устранение неполадок

Если у вас возникли проблемы с запуском приложений графического пользовательского интерфейса, сначала ознакомьтесь с этим руководством: диагностика проблем с типом «не удается открыть отображение» с WSLg

Современные GUI приложения — morfizm — LiveJournal

 


Jul. 28th, 2016 02:29 am Современные GUI приложения

Я не писал GUI уже тыщу лет, наверное, со времён Дельфей. Полазил посмотрел, какие есть GUI-фреймворки. В частности, посмотрел Qt и JavaFX — даже если не привязываться к конкретному языку программирования, а просто смотреть, что там вообще есть из популярного.

Текущая ситуация с гуём меня огорчает. На дворе 2016 год, а всё ещё нет ничего по-настоящему кроссплатформенного, лёгкого в использовании и выглядящего нативно. Если отбросить кроссплатформенность, то для винды есть C#. Если отбросить десктопы и работать только с клаудом или другим серверным бэкэндом, то есть куча отлаженных веб-технологий (HTML, CSS, JavaScript). Всё остальное выглядит отвратительным геморроем.

А мне бы хотелось наваять какие-то утилитки под Винду, но чтобы потом можно было легко портировать на другие платформы. Чисто для примера, чтобы конструктивней размышлять на эту тему, рассмотрим утилитку обработки изображений (это действительно просто упрощённый пример, конкретно эта утилитка мне не нужна). Берёшь файл, утилитка его, скажем, уменьшает до заданного размера или с заданным качеством, юзер может увеличивать куски и сравнивать их, а потом может нажать «сохранить», или же он поменяет настройки, чтобы переделать, если ему не понравился результат.

Пришла в голову такая идея: сделать это как маленький веб-сервер. Доступ к локальной файловой системе, к тяжеловесному коду по генерации превьюшки и к любым другим клиентским фичам сделать через HTTP или TCP. Соответственно, инсталлятор утилитки прописывает firewall rule, чтобы разрешить этот порт для localhost, шорткат для запуска запускает сервер + открывает веб страницу + по закрытию клиент посылает серверу сигнал, что пора умирать. Или сделать, чтобы клиент посылал keep-alives, и как только в течение пары минут keep alives не слышно, сервер делает себе харакири.

Плюсы:
*) Кроссплатформенность. Кроссплатформенный сервер написать можно на чём угодно. Веб сайт, открывающийся во всех браузерах, я так понимаю, не очень большая проблема, если писать его правильно. Platform-specific код это только настройка firewall в инсталляторе.
*) Лёгкая переносимость на mobile если серверную часть начать где-то хостить (cloud back-end вместо localhost/desktop back-end).
*) GUI хоть и не будет выглядеть как нативное настольное приложение (browser-таки), но будет достаточно привычным и узнаваемым. С веб страницами все умеют работать.

Минусы:
*) Browser это всё-таки ненативный интерфейс. Может быть, будет неэстетично.
*) Возможно, будет долго загружаться. Как минимум, сотни миллисекунд по горячему или секунды по холодному.
*) Я не уверен, насколько легко разрабатывать и отлаживать Web гуй. Я этого очень давно не делал, но воспоминания со времён 2000 года у меня нерадостные. Хотелось бы IDE, autocomplete, пошаговый дебаггер и всякие тому подобные классные штуки. Они есть?

Ваши мысли? Есть ли что-нибудь ещё проще/правильнее для современных GUI приложений?

Tags: 1, polls questions and social games, software development

16 comments — Leave a comment

From:birdwatcher
Date:July 28th, 2016 10:40 am (UTC)
(Link)

А чем Qt не понравился? По-моему, он прекрасен.

From:lyuden
Date:July 29th, 2016 09:12 am (UTC)
(Link)

Я работал в основном с биндингами к Питону.

ИМХО. Невероятно сложная и глючная хрень. Особенно если люди пишут на сигналах, а не на моделях. Получить циклический граф вызовов — фигня. Отладка ? Какая отладка. QVariant, блин, ненавижу. Индексы в моделях — я не знаю какой извращенец их придумал.

Нативного вида нет ни на линуксе ни на винде. Перевод вообще эпичен. Ну т.е. да с нуля писать дольше. Но геммороя все равно хватает.

Веб в этом отношении куда как разумнее и понятнее.

From:dennyrolling
Date:July 28th, 2016 01:55 pm (UTC)
(Link)

debugging sucks testing rocks, но если сильно надо то в хроме все сейчас норм с дебаггингом.

From:ex_juan_gan
Date:July 28th, 2016 02:31 pm (UTC)
(Link)

Уже давно пришел я к выводу, что весь гуй надо писать на вебе (html, js), а функциональность на бакенде. И даже локальную инсталляцию разбивать на эти два кусочка.

Впервые это я увидел в гугловском локальном поиске, который был выкачен этак лет 10 назад, и с тех пор забыт. Так с тех пор сам и делаю.

From:_m_e_
Date:July 28th, 2016 02:57 pm (UTC)
(Link)

Знакомая дилемма. Я так в 2000-ом написал гуй на HTML в МС.
То есть пришел я только-только в МС. Как писать гуй забыл.
Мне дают утилитку написать, много кода и чуть-чуть гуя.
Пишу на С++, регистрируют как COM, делаю гуй на HTA (это у МС считалось HTML Apps, позволило избежать сервера).

Сейчас кажется популярно бандлить Хромиум с сервером в одном приложении, для этого какие-то тулы были.

From:andreyvo
Date:July 28th, 2016 03:30 pm (UTC)
(Link)

С UI/UX беда, никто его не умел и не умеет делать. А на мобильниках вообще аховая ситуация. НИЧЕГО ХОРОШЕГО НЕТ НУ ВООБЩЕ. Особенно если мутить что-то кроссплатформенное, игры там тырыпыры. ..

Давным-давно, в году где-то 2000-ом был у нас один веб-магазин на PHP. Заказчику срочно понадобилась оффлайн версия, каталог на CD, для понтов и презентаций. Сваял за неделю на Delphi, весь дизайн HTML-ный показывался через хитровыеб@ный ActiveX в окне IE4. MySQL базу конвертнули в .dbf-ки, каким-то макаром даже SQL запросы работали, практически без изменений, и главное весь этот глюкодром даже работал, причем с сюдюка.

From:ermouth
Date:July 28th, 2016 06:51 pm (UTC)
(Link)

Делать как HTML5 + js, компилировать в приложение с помощью http://electron.atom.io/

Какой конкретно фреймворк использовать для гуя – сложно сказать, не зная задачи и твоих скиллов/пристрастий.

From:sasha_gil
Date:July 29th, 2016 01:54 am (UTC)
(Link)

Да, я про Электрон читал на Хабре, его сравнивали с более старым фреймворком такого типа NW.js (node-webkit) https://habrahabr.ru/post/304574/, плюсов больше набрал Электрон.

Можно ещё такой финт на тему «выглядящего нативно» (то есть без HTML, JS управляет платформно-специфичным маркапом, который надо делать отдельно для мобильных платфом iOS / Android / Windows Universal, то есть Windows 10): забить на «десктоповость» и взять мобильный фреймворк React Native или NativeScript. Под Windows 10 запускать результирующее приложение как Windows Store приложение. Я сейчас смотрю на React Native, у него недавно появилась интеграция с Windows. На NativeScript я думаю посмотреть позже, сейчас просто проверил, что с Windows 10 интеграция тоже недавно появилось.

Дима, если ты это читаешь — кроме рассматриваемой идеи JS-приложения имей так же в виду Xamarin (кроссплатформенный С#), он нынче бесплатный extension к Visual Studio 2015. Unity — тоже кроссплатформенный C#, но это коммерческий продукт (и я не знаю, как там с библиотеками контролов, это игровая платформа в первую очередь). Если всё-таки выберешь JS… Я лично, если буду когда-либо что-либо делать на JS, буду с самого начала использовать TypeScript. У NativeScript он с самого начала хорошо прикручен, но, по идее, прикрутить можно где угодно с компиляцией в JS.

Коррекция: я писал выше «Windows 10» как синоним «Universal Windows», однако возможность строить «Universal Windows» приложения для Windows Store появилась в Windows 8.1. Это мелочи, поскольку Windows-телефонами никто не пользуется (и, вероятно, они умрут, но ещё не умерли). Да, вот тут https://www.nativescript.org/blog/nativescript-and-xamarin авторы / хозяева NativeScript сравнивают его с Xamarin.

Edited at 2016-07-29 02:45 am (UTC)

From:_m_e_
Date:July 29th, 2016 08:00 am (UTC)
(Link)

спасибо за линки, очень интересно!

From:sasha_gil
Date:July 29th, 2016 06:56 pm (UTC)
(Link)

Это вприглядку в основном — на практике я установил и пособирал в разных конфигурациях React Native для Windows Store в рамках короткого экспериментального проектика. Программировать простую UI логику на JS удобно, потому что типа быстрый REPL (ну ты сам про это написал выше по опыту 16-летней давности), но я этот язык так и не полюбил, хотя два года на нём писал. Он, правда, улучшается, и поддержка в IDE улучшается тоже. Если ты что-то интересное найдёшь, дай знать! В этой области «актуальные» вещи меняются довольно быстро.

From:ermouth
Date:July 29th, 2016 11:36 am (UTC)
(Link)

Насчёт TS/NS – по-моему, вы зря продвигаете технологии, которыми сами не пользуетесь.

TS в маленьких проектах, делаемых в одно лицо – просто лишний слой. «В гамаке и скафандре», да.

Насчёт NS – там всё грустно с поддерживаемыми гуёвыми контролами. Хотите контрол с календариком? Извольте заплатить $199.

Начинать с них точно не стóит.

From:sasha_gil
Date:July 29th, 2016 05:53 pm (UTC)
(Link)

конкретнее про мой опыт с TS версус JS. Я писал три года назад на JS в Visual Studio апп для Windows Store среднего размера в команде человек пять и чувствовал себя очень некомфортно, собирался переводить на TS, но проект закончился раньше. Года два назад помогал школьнику с маленьким проектиком и тоже почувствовал себя легче с TS. С тех пор JS обновился, и среду разработки можно выбрать более дружественную к JS, но мне лично этот лишний слой при работе с Visual Studio был нужен. Правда, я сейчас на C++ пишу, моё мнение неуместно и необосновано. Расскажите поподробнее про Электрон, вы с ним работаете / работали?

From:ermouth
Date:July 29th, 2016 08:47 pm (UTC)
(Link)

> но мне лично этот лишний слой при работе с Visual Studio был нужен

Рискну предположить, что дело не в VS, а в привычке писать в ООП-стиле. Общепринято считается, что мире JS такой подход (за редкими исключениями) всё таки даёт больше ограничений, чем преимуществ.

Скромное распространение TS, особенно если учесть мощь вендора – дополнительный (хотя и небесспорный) аргумент в пользу того, что накладываемые ограничения серьёзно обесценивают ООП-шные плюшки.

> Расскажите поподробнее про Электрон, вы с ним работаете

Тут надо сравнить nw.js и Электрон, по-хорошему то, и объяснить, почему я посоветовал Электрон.

Мы не делаем десктопные/мобильные приложения на заказ, поэтому с Электроном я только вдумчиво баловался. С nw.js всё чуть серьёзнее, его мы используем в боевых условиях, но не как обёртку для изготовления стэндэлон-приложений. То-есть, приложения я с ним делал, но тоже в рамках вдумчивого «поиграться».

В силу того, что я занимаюсь по преимуществу гуем или тем, у чего есть гуй и он важен, я, конечно, пробовал обернуть уже имеющийся код сложных гуёвых разработок. С Электроном порог входа из точки «вот у меня есть html+js+css, сделай десктопное приложение» чуть выше, чем с nw.js. Тем не менее, после прохождения порога дальше телодвижений точно меньше.

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

Дима, скорее всего, будет в это всё погружаться из другой начальной точки. Что-то вроде «вот у меня есть логика, мне к ней нужен гуй» – он примерно про это пишет. С такими вводными и порог вхождения в Электрон будет ниже, чем в нод-вебкит, при сохранении мéньшего количества телодвижений overall.

From:sasha_gil
Date:July 30th, 2016 06:16 am (UTC)
(Link)

Да, это был ООП-стиль — во-первых, в обоих случаях обстоятельства диктовали; во-вторых, у меня нет опыта программирования в другом стиле.

Спасибо за информацию про Электрон / nw.js! Попробую найти время / силы поиграться с Электроном.

From:_winnie
Date:July 28th, 2016 07:07 pm (UTC)
(Link)

А после отладки в браузере — нет проблем приклеить вместо html-рендера какой-нибудь другой, если так будет сильно лучше для конкретной платформы (это сможет сделать даже другой человек).

From:lyuden
Date:July 29th, 2016 09:05 am (UTC)
(Link)

Эта идея мягко говоря не нова. Я сейчас лоббирую переписывание нашей программы с PyQt4 на embedded Chrome + react.js + HTML

https://github.com/cztomczak/cefpython

Тем более что мы параллельно все равно разрабатываем интерфейс для веба.

Вебсервер необязателен, так как можно вызывать функции из javascript нативно.

IDE отладка и тестирование для веб-интерфейса, на голову превосходят все что есть для отладки GUI не под javascript.

 

создаём простое приложение с PyQt и Qt Designer

Эта статья предназначена для тех, кто только начинает своё знакомство с созданием приложений с графическим интерфейсом (GUI) на Python. В ней мы рассмотрим основы использования PyQt в связке с Qt Designer. Шаг за шагом мы создадим простое Python GUI приложение, которое будет отображать содержимое выбранной директории.

Что нам потребуется

Нам понадобятся PyQt и Qt Designer, ну и Python, само собой.

В этой статье используется PyQt5 с Python 3, но особых различий между PyQt и PySide или их версиями для Python 2 нет.

Windows: PyQt можно скачать здесь. В комплекте с ним идёт Qt Designer.

macOS: Вы можете установить PyQt с помощью Homebrew:

$ brew install pyqt5

Скачать пакет с большинством компонентов и инструментов Qt, который содержит Qt Designer, можно по этой ссылке.

Linux: Всё нужное, вероятно, есть в репозиториях вашего дистрибутива. Qt Designer можно установить из Центра Приложений, но PyQt придётся устанавливать через терминал. Установить всё, что нам понадобится, одной командой можно, например, так:

# для Fedora:
$ sudo dnf install python3-qt5 qt-creator
# для Debian/Ubuntu:
$ sudo apt install python3-qt5 pyqt5-dev-tools qtcreator

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

$ pyuic5
Error: one input ui-file must be specified

Если вы видите сообщение, что такой команды нет или что-то в таком роде, попробуйте загуглить решение проблемы для вашей операционной системы и версии PyQt.

Если вы используете Windows, то, скорее всего, путь C:\Python36\Scripts (измените 36 на вашу версию Python) не прописан в вашем PATH. Загляните в этот тред на Stack Overflow, чтобы узнать, как решить проблему.

Дизайн

Основы

Теперь, когда у нас всё готово к работе, давайте начнём с простого дизайна.

Откройте Qt Designer, где вы увидите диалог новой формы, выберите Main Window и нажмите Create.

После этого у вас должна появиться форма — шаблон для окна, размер которого можно менять и куда можно вставлять объекты из окна виджетов и т.д. Ознакомьтесь с интерфейсом, он довольно простой.

Теперь давайте немного изменим размер нашего главного окна, т. к. нам не нужно, чтобы оно было таким большим. А ещё давайте уберём автоматически добавленное меню и строку состояния, поскольку в нашем приложении они не пригодятся.

Все элементы формы и их иерархия по умолчанию отображаются в правой части окна Qt Designer под названием Object Inspector. Вы с лёгкостью можете удалять объекты, кликая по ним правой кнопкой мыши в этом окне. Или же вы можете выбрать их в основной форме и нажать клавишу DEL на клавиатуре.

В итоге мы имеем почти пустую форму. Единственный оставшийся объект — centralwidget, но он нам понадобится, поэтому с ним мы ничего не будем делать.

Теперь перетащите куда-нибудь в основную форму List Widget (не List View) и Push Button из Widget Box.

Макеты

Вместо использования фиксированных позиций и размеров элементов в приложении лучше использовать макеты. Фиксированные позиции и размеры у вас будут выглядеть хорошо (пока вы не измените размер окна), но вы никогда не можете быть уверены, что всё будет точно так же на других машинах и/или операционных системах.

Макеты представляют собой контейнеры для виджетов, которые будут удерживать их на определённой позиции относительно других элементов. Поэтому при изменении размера окна размер виджетов тоже будет меняться.

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

Теперь в меню Qt Designer нажмите Form, затем выберите Preview и увидите что-то похожее на скриншот выше. Выглядит хорошо, не так ли? Но вот что случится, когда мы изменим размер окна:

Наши объекты остались на тех же местах и сохранили свои размеры, несмотря на то что размер основного окна изменился и кнопку почти не видно. Вот поэтому в большинстве случаев стоит использовать макеты. Конечно, бывают случаи, когда вам, например, нужна фиксированная или минимальная/максимальная ширина объекта. Но вообще при разработке приложения лучше использовать макеты.

Основное окно уже поддерживает макеты, поэтому нам ничего не нужно добавлять в нашу форму. Просто кликните правой кнопкой мыши по Main Window в Object Inspector и выберите Lay outLay out vertically. Также вы можете кликнуть правой кнопкой по пустой области в форме и выбрать те же опции:

Ваши элементы должны быть в том же порядке, что и до внесённых изменений, но если это не так, то просто перетащите их на нужное место.

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

Если у вас не получается переместить элемент в главном окне, вы можете сделать это в окне Object Inspector.

Последние штрихи

Теперь, благодаря вертикальному размещению, наши элементы выровнены правильно. Единственное, что осталось сделать (но не обязательно), — изменить имя элементов и их текст.

В простом приложении вроде этого с одним лишь списком и кнопкой изменение имён не обязательно, так как им в любом случае просто пользоваться. Тем не менее правильное именование элементов — то, к чему стоит привыкать с самого начала.

Свойства элементов можно изменить в разделе Property Editor.

Подсказка: вы можете менять размер, передвигать или добавлять часто используемые элементы в интерфейс Qt Designer для ускорения рабочего процесса. Вы можете добавлять скрытые/закрытые части интерфейса через пункт меню View.

Нажмите на кнопку, которую вы добавили в форму. Теперь в Property Editor вы должны видеть все свойства этого элемента. В данный момент нас интересуют objectName и text в разделе QAbstractButton. Вы можете сворачивать разделы в Property Editor нажатием по названию раздела.

Измените значение objectName на btnBrowse и text на Выберите папку.

Должно получиться так:

Именем объекта списка является listWidget, что вполне подходит в данном случае.

Сохраните дизайн как design. ui в папке проекта.

Превращаем дизайн в код

Конечно, можно использовать .ui-файлы напрямую из Python-кода, однако есть и другой путь, который может показаться легче. Можно конвертировать код .ui-файла в Python-файл, который мы потом сможем импортировать и использовать. Для этого мы используем команду pyuic5 из терминала/командной строки.

Чтобы конвертировать .ui-файл в Python-файл с названием design.py, используйте следующую команду:

$ pyuic5 path/to/design.ui -o output/path/to/design.py

Пишем код

Теперь у нас есть файл design.py с нужной частью дизайна нашего приложения и мы начинать работу над созданием его логики.

Создайте файл main.py в папке, где находится design.py.

Другие интересные статьи по Python.

Используем дизайн

Для Python GUI приложения понадобятся следующие модули:

import sys  # sys нужен для передачи argv в QApplication
from PyQt5 import QtWidgets

Также нам нужен код дизайна, который мы создали ранее, поэтому его мы тоже импортируем:

import design  # Это наш конвертированный файл дизайна

Так как файл с дизайном будет полностью перезаписываться каждый раз при изменении дизайна, мы не будем изменять его. Вместо этого мы создадим новый класс ExampleApp, который объединим с кодом дизайна для использования всех его функций:

class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__(self):
        # Это здесь нужно для доступа к переменным, методам
        # и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)  # Это нужно для инициализации нашего дизайна

В этом классе мы будем взаимодействовать с элементами интерфейса, добавлять соединения и всё остальное, что нам потребуется. Но для начала нам нужно инициализировать класс при запуске кода. С этим мы разберёмся в функции main():

def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение

И чтобы выполнить эту функцию, мы воспользуемся привычной конструкцией:

if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()

В итоге main. py выглядит таким образом:

import sys  # sys нужен для передачи argv в QApplication
from PyQt5 import QtWidgets
import design  # Это наш конвертированный файл дизайна

class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__(self):
        # Это здесь нужно для доступа к переменным, методам
        # и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)  # Это нужно для инициализации нашего дизайна

def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение

if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()

Если запустить этот код: $ python3 main.py, то наше приложение запустится!

Но нажатие на кнопку ничего не даёт, поэтому нам придётся с этим разобраться.

Добавляем функциональность в наше Python GUI приложение

Примечание Весь дальнейший код пишется внутри класса ExampleApp.

Начнём с кнопки Выберите папку. Привязать к функции событие вроде нажатия на кнопку можно следующим образом:

self.btnBrowse.clicked.connect(self.browse_folder)

Добавьте эту строку в метод __init__ класса ExampleApp, чтобы выполнить привязку при запуске приложения. А теперь взглянем на неё поближе:

  • self.btnBrowse: здесь btnBrowse — имя объекта, который мы определили в Qt Designer. self говорит само за себя и означает принадлежность к текущему классу;
  • clicked — событие, которое мы хотим привязать. У разных элементов разные события, например, у виджетов списка есть itemSelectionChanged и т.д.;
  • connect() — метод, который привязывает событие к вызову переданной функции;
  • self. browse_folder — просто функция (метод), которую мы описали в классе ExampleApp.

Для открытия диалога выбора папки мы можем использовать встроенный метод QtWidgets.QFileDialog.getExistingDirectory:

directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку")

Если пользователь выберет директорию, переменной directory присвоится абсолютный путь к выбранной директории, в противном случае она будет равна None. Чтобы не выполнять код дальше, если пользователь закроет диалог, мы используем команду if directory:.

Для отображения содержимого директории нам нужно импортировать os:

import os

И получить список содержимого следующим образом:

os.listdir(path)

Для добавления элементов в listWidget мы используем метод addItem(), а для удаления всех элементов у нас есть self.listWidget.clear().

В итоге функция browse_folder должна выглядеть так:

def browse_folder(self):
    self. listWidget.clear()  # На случай, если в списке уже есть элементы
    directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку")
    # открыть диалог выбора директории и установить значение переменной
    # равной пути к выбранной директории

    if directory:  # не продолжать выполнение, если пользователь не выбрал директорию
        for file_name in os.listdir(directory):  # для каждого файла в директории
            self.listWidget.addItem(file_name)   # добавить файл в listWidget

Теперь, если запустить приложение, нажать на кнопку и выбрать директорию, мы увидим:

Так выглядит весь код нашего Python GUI приложения:

import sys  # sys нужен для передачи argv в QApplication
import os  # Отсюда нам понадобятся методы для отображения содержимого директорий

from PyQt5 import QtWidgets

import design  # Это наш конвертированный файл дизайна

class ExampleApp(QtWidgets.QMainWindow, design. Ui_MainWindow):
    def __init__(self):
        # Это здесь нужно для доступа к переменным, методам
        # и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)  # Это нужно для инициализации нашего дизайна
        self.btnBrowse.clicked.connect(self.browse_folder)  # Выполнить функцию browse_folder
                                                            # при нажатии кнопки

    def browse_folder(self):
        self.listWidget.clear()  # На случай, если в списке уже есть элементы
        directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку")
        # открыть диалог выбора директории и установить значение переменной
        # равной пути к выбранной директории

        if directory:  # не продолжать выполнение, если пользователь не выбрал директорию
            for file_name in os.listdir(directory):  # для каждого файла в директории
                self. listWidget.addItem(file_name)   # добавить файл в listWidget

def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение

if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()

 


Это были основы использования Qt Designer и PyQt для разработки Python GUI приложения. Теперь вы можете спокойно изменять дизайн приложения и использовать команду pyuic5 без страха потерять написанный код.

Перевод статьи «PyQt: Getting started with PyQt and Qt Designer»

Языки программирования для написания GUI-приложения

Вопрос:

Кроме .NET или Java, какой язык можно использовать для написания приложения для Windows и Linux?

Лучший ответ:

Вы можете отменить свой вопрос: какие инструменты имеются, и какие языки они поддерживают?

Пример GTK: (из wikipedia)

C           GTK+ 
C++         gtkmm 
Ruby        ruby-gtk2 
Python      PyGTK 
Java        java-gnome 
. NET        Gtk# 
PHP         PHP-GTK 
Perl        Gtk2-Perl

Вы можете найти поддержку для многих языков, если вы изучите эти другие инструменты для виджета:

Juce — An extensive cross-platform UI toolkit
FLTK — A light, cross platform, non-native widget toolkit
FOX toolkit — A fast, open source, cross-platform widget toolkit
GTK+ — The GIMP toolkit, a widget toolkit used by GNOME applications
IUP_(software) -- IUP cross platform static/dynamic library C/LUA, Lua (MIT) licence
JX Application Framework
Microsoft Foundation Class - The most commonly used widgeting toolkit for Windows.
Motif
Object Windows Library & OWLNext
Qt — A widget toolkit used by KDE
Standard Widget Toolkit — SWT for Java
Swing — Java widget toolkit
Tk — Toolkit part of the Tcl - project and often used by Perl and Python programmers
Ultimate++
Visual Component Library
wxWidgets — A free widget toolkit
XForms

Ответ №1

С++ с картой Qt: http://qt. nokia.com/products

Ответ №2

Python – отличный вариант для просмотра с PyQT и wxPython в качестве двух широко используемых фреймворков для графических приложений для ПК.

Ответ №3

  • Каждый язык программирования (или, точнее, каждый механизм выполнения языка программирования), который может взаимодействовать с собственным кодом, может использоваться для реализации приложений GUI. Это уже включает почти все языки программирования, созданные за последние 60 лет, включая, но не ограничиваясь ими, C, С++, Objective-C, Objective-C ++, D, Eiffel, Fortran, Pascal, Modula, Oberon, Go, Haskell, OCaml, Python, Ruby, Perl, PHP, Tcl, С#, VB.NET, Java, Scala, F #, Newspeak, Animorphic Smalltalk, Eiffel, Lua, Potion, Falcon, Dao, Nimrod, Genie, Vala, Scheme, CommonLisp, Cobol.
  • Каждый язык программирования, который работает на платформе Java, может использоваться для написания графических приложений. Это включает около 400 языков, о которых мы публично знаем, плюс кто знает, сколько языков не известно общеизвестно. В этот список входят Java, Scala, NetRexx, Python, Ruby, PHP, ECMAScript, Groovy, Fan, Clojure, JavaFX, AspectJ, Fortress, Cobol.
  • Каждый язык программирования, который работает на платформе CLI и/или .NET(подсказка:.NET не является языком программирования, это маркетинговый термин для комбинации механизма выполнения CIL, реализации CLI, реализации CTS, реализации BCL и фреймворк) можно использовать для написания графических приложений. Это включает около 200 языков, о которых мы публично знаем. Этот список включает С#, VB.NET, F #, Eiffel.NET, SpeС#, Sing #, X #, Polyphonic С#, Cω, Ruby, Python, Perl, Tcl, PHP, С++, SABLE, Scheme, CommonLisp, Clojure, Вентилятор, Scala, Cobol, Cobra, Perl.
  • Многие языки программирования привносят свой собственный графический интерфейс для написания графических приложений, например Tcl, Newspeak, Dolphin Smalltalk, Squeak Smalltalk, Delphi, Rebol.

И это только те, которые я мог придумать с головы.

Ответ №4

Ну, вы сказали windows и linux, так что вы всегда можете вернуться на С++. С ним сделано множество хороших приложений для настольных компьютеров.

Ответ №5

Ruby Shoes. Это самый красивый API, который я когда-либо видел, и он работает на Windows, OS X и Linux.

Ответ №6

Любой язык, обеспечивающий доступ к интересующим вас графическим интерфейсам.

Ответ №7

Tcl/Tk

Ответ №8

сборка x86

Ответ №9

Если вы хотите использовать Ruby, попробуйте FXRuby.

Ответ №10

Это действительно зависит от многих факторов, так или иначе, если вы хотите использовать многоплатформенное приложение с собственным пользовательским интерфейсом, я предлагаю вам комбинацию wxWidgets и C/С++ (я использую прямо сейчас).

Ответ №11

Я немного удивлен, что никто не предложил REALbasic, поскольку он в очень схожих ключевых формах с .NET и Java ( IDE, которая очень похожа на кросс-платформу Visual Studio, и которая начиналась как инструмент разработки Java на Mac), не в последнюю очередь, поскольку они регулярно запускают рекламные объявления в Stack Overflow.

Сам язык является “OO VB”. Не совсем VB.NET, но очень похоже. Лично мне не нравится этот язык, но как среда для разработки графических приложений, это очень важно. У него есть некоторые ошибки, но еще быстрее обходить ошибки, чем реализовывать один и тот же интерфейс на 2 или 3 целевых платформах (если ваше приложение не является огромным проектом, который оправдывает создание собственной GUI-инфраструктуры).

Я бы, вероятно, оставил тяжелую работу над внешними компонентами, написанными на C/С++, но у него есть полноценные и очень функциональные API, включая все, от высокоуровневого SOAP-клиента до сырых TCP-сокетов, а также 2D и 3D (включая поверхность OpenGL) API.

Вы также можете использовать Mono – и использовать С#, например, – но с GTK вместо WinForms, используя Mono Develop (I предположите, что это технически это не “.NET”, но вы, возможно, уже рассмотрели его). Для приложений с графическим интерфейсом он довольно зрелый в Windows и Linux, до тех пор, пока вы создаете свое приложение с обеих сторон с самого начала.

Ответ №12

Erlang и его привязки к Wx.

Я не встречал язык, на котором не было привязки к некоторому набору инструментов GUI: если люди заботятся о языке, они строят привязки.

Ответ №13

Одна важная вещь, которую следует учитывать, – это ваш предыдущий опыт, который не является второстепенной темой, потому что освоение языка программирования требует времени.

Сказал так, я люблю Smalltalk в любом вкусе, поэтому вы можете выбрать (в мире Smalltalk):

  • Dolphin Smalltalk (является родным Windows, но exes работает на Linux под
    Вино)
  • Visual Works
  • Visual Age
  • Smalltalk/X
  • Писк /Pharo

Они являются основными Smalltalk и называются в определенном порядке.

Ответ №14

В зависимости от того, как вы определяете приложение GUI.

Вы можете использовать HTML/Flash/Flex/JavaScript для создания приложения Adobe AIR, которое может работать как обычное приложение.

Как создать приложение Python с графическим интерфейсом с помощью wxPython — настоящий Python

Существует множество наборов инструментов для графического пользовательского интерфейса (GUI), которые можно использовать с языком программирования Python. Большая тройка — это Tkinter, wxPython и PyQt. Каждый из этих наборов инструментов будет работать с Windows, macOS и Linux, а PyQt имеет дополнительные возможности для работы на мобильных устройствах.

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

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

Вот затронутые темы:

  • Начало работы с wxPython
  • Определение графического интерфейса пользователя
  • Создание каркасного приложения
  • Создание рабочего приложения

Начнем учиться!

Начало работы с wxPython

Инструментарий wxPython GUI представляет собой оболочку Python для библиотеки C++, которая называется wxWidgets. Первоначальный выпуск wxPython был в 1998, поэтому wxPython существует довольно давно. Основное отличие wxPython от других наборов инструментов, таких как PyQt или Tkinter , заключается в том, что wxPython по возможности использует настоящие виджеты на собственной платформе. Это делает приложения wxPython естественными для операционной системы, в которой они работают.

PyQt и Tkinter сами рисуют свои виджеты, поэтому они не всегда совпадают с нативными виджетами, хотя PyQt очень близок.

Это не означает, что wxPython не поддерживает пользовательские виджеты. На самом деле в набор инструментов wxPython входит множество пользовательских виджетов, а также десятки основных виджетов. На странице загрузок wxPython есть раздел под названием 9.0007 Дополнительные файлы , которые стоит проверить.

Здесь находится загрузка демонстрационного пакета wxPython. Это милое маленькое приложение, демонстрирующее подавляющее большинство виджетов, входящих в состав wxPython. Демонстрация позволяет разработчику просматривать код на одной вкладке и запускать его на второй вкладке. Вы даже можете отредактировать и повторно запустить код в демоверсии, чтобы увидеть, как ваши изменения повлияют на приложение.

импортировать PySimpleGUI как sg

layout = [[sg. Button('Привет, новый стек', size=(30,4))]]

window = sg.Window('GUI SAMPLE', layout, size=(200,100))

событие, значения = window. read()

1

2

3

4

5

6

7

8

9

10

11

#Import PySimpleGUI

import PySimpleGUI as sg

 

#Draw the button

layout = [[sg.Button('Hello, New Stack', size=(30,4))]]

3

02 3

2 3

2 #Нарисовать окно

window = sg.Window('GUI SAMPLE', layout, size=(200,100))

 

#Определить, что происходит при нажатии кнопки

событие, значения = window.read()

импорт tkinter как tk

из tkinter import simpledialog

КОРЕНЬ = tk.Tk()

USER_INP = simpledialog.askstring(title="Input Test",

                                prompt="Введите ваше имя:")

1

2

3

4

5

6

7

8

10

11

12

13

14

15

16

# Import Tkinter и Simpledialog

Импорт Tknter As TK

из Thkinter Import Simpledialog

# Определите корневое окно

root = tk.tk ()

# Define входной диаграммы

ROOT.WITHDRAK. ()

# Определите диалог ввода

user_inp = simpledialog.askstring (title = "test Test",

rample = "Введите свое имя ?:")

# Печать пользовательского ввода

Print (") Привет", USER_INP)