На чем пишут десктопные приложения
Перейти к содержимому

На чем пишут десктопные приложения

  • автор:

На чем разрабатывают desktop-приложения и нужно ли оно?

Начну с того, что мне нужны советы, а не разведение войн что лучше.

Я хотел бы знать:
1. Какую технологию выбирают продуктовые компании для написания десктоп софта (кроссплатформенного).
2. Умер ли всем хорошо знакомый Делфи?
3. Стоит ли вообще смотреть в сторону desktop, когда есть возможность разработать веб-решение? Интересует вопрос, на сколько сложно аудитории перейти от использования «программ» к использованию веб-приложения.

�� Подобається Сподобалось 0

До обраного В обраному 0

Схожі топіки
  • Три способи організувати код у BlazorServer
  • Blazor Forms
  • Events in Blazor
  • Blazor Server Authorization
  • Пишемо автотести на базі Playwright та Jest

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

41 коментар

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Mykola Shatokhin Founder в Yellow Cartridge 02.11.2012 15:02

Начнем с того, на чем вы хотите писать это приложение?

Если С++, то Qt или WxWidgets
Если C, то GTK3+
Если D или что-то другое, то не подскажу.

Если Java или Python, то еще раз хорошо подумайте

Oksana Kosinova инженер-программист 02.11.2012 11:10

Интересует вопрос, на сколько сложно аудитории перейти от использования «программ» к использованию веб-приложения.

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

Maksym Iakovliev Technical Solutions Architect 02.11.2012 10:57

Десктоп приложение стоит делать при следующих условиях:
1. Если приложение будет требовательно к ресурсам.
2. Если приложение должно работать даже без доступа к глобальной сети.
3. Если требуется быстрый отзывчивый интерфейс

4. Если есть ограничения по безопасности использования

Какую технологию выбирают продуктовые компании для написания десктоп софта

С/С++ в качестве языков/компиляторов

Qt/OpenGL — в качестве отрисовки UI

Умер ли всем хорошо знакомый Делфи?

Еще всякие C# переживет (шутка)

Множество мелких продуктовых компаний используют Delphi

когда есть возможность разработать веб-решение

Если есть возможность и нет вышеперечисленных ограничений- однозначно на ориентироваться надо на Web.

Sergey Litvinov .Net Developer в DataArt 31.10.2012 16:38

Как насчет wxWidgets? Популярны ли они еще? Их плюс в том, что UI нативен на каждой платформе.

Mykola Shatokhin Founder в Yellow Cartridge 02.11.2012 14:57

А они были когда-то популярны? Была бы на них документация. Ну и минус их в том, что код не скомпилится без изменений на любой платформе. Хотя если вынести все платформозависимые штуки в отдельный класс.

Sergey Litvinov .Net Developer в DataArt 02.11.2012 15:01

» Ну и минус их в том, что код не скомпилится без изменений на любой платформе»
Если речь идет о нём как чисто о UI фреймворке, то чего он не скомпилится?
Да, и платформозависимые штуки всеравно нужно выносить отдельно. В любом же случае framework не представит 100% абстракции над платформой. Хотя это конечно же зависит от конкретного проекта.

Dmitry Marchenko Web Developer в SHAPE 31.10.2012 12:28

Сейчас популярен комплексный подход к запуску сервисов — ПО iOs, Android, Windows + Web — сервис. Все эти клиенты работают с единым сервером и единой БД. Т.е. человек может с любого девайса получить доступ к сервису.
Про Делфи — существуют еще проеты на нем. Но их стараются переписать на C#.

Делфи доживает свои последние дни)

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

Например почтовый клиент для гуглопочты — это хорошо. Есть доля людей, которые ими пользуются. У меня вопрос — а есть ли ещё такие приложения, которым очень не помешало бы десктопной автоматизации. И даже не в десктопе вопрос, скорее чтобы персональный компьютер/пад выполнял за юзера частые действия, на которые тот тратит много времени. При этом «много» может быть и 2 минуты в день.

И насколько реально такие программы продавать — как они продаются, кому, где? Возможно ли B2B?

ЗЫ. Даёшь мозговой штурм!

когда я в 2008 пробовал подобное — шло более менее неплохо (600к скачек вроде), хотя это был опенсоурс

проблема в том что если «сервисы» не твои — возникает масса вопросов легальности и поддержки

На чём написать Desktop-приложение?

Доброго дня. Хочу написать небольшое приложение для работников, но встал вопрос на чем писать.

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

Записей в базе планируется в районе несколько тысяч.

Гугл подсказывает C# и Java. Браузерный вариант не подходит.

Paton
20.01.24 19:17:52 MSK

  • Ответить на это сообщение
  • Ссылка

На чем лучше написать Desktop приложение?

Electron.js хороший вариант, с ним разработка идет быстро благодаря тому, что весь интерфейс пишется на HTML, CSS, JS, а бек — Node.JS. Однако очень сильно хромает производительность, к тому-же сомневаюсь, что он кроссплатформенный для всех версий винды.

В целом, необходимость в написании Desktop приложения, который будет доступен для всех версий Windows (без установок доп. компонентов для пользователя), а так-же необходимо, чтобы были возможности написать хороший UI (Необязательно web ui, но это бы сделало разработку удобнее и быстрее). В какую сторону двигаться? Какой язык или платформа для этого подходят лучше всего? Желательно что-бы производительность так сильно не страдала, как в случае с Electron.js.

Спасибо за ваши ответы

  • Вопрос задан более года назад
  • 709 просмотров

3 комментария

Средний 3 комментария

Производительность vs code устраивает?
Habrahabren @Habrahabren Автор вопроса

Антон Антон, вполне, я знаю что он написан на Electron.js. Уверен что над ним работала огромная команда, которая сделала его оптимизированным

Habrahabren, просто что в планируемом к написанию приложении требует прям высокой производительности?
так-то и на с++ (в таком случае я бы топил за qt) можно написать, но в простых приложениях преимущество от быстрого написания и намного меньшего количества мест для выстрела в ногу часто перевешивает.

Решения вопроса 4
VoidVolker @VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?

  • .Net + C#
  • Qt + C++

Ответ написан более года назад
Комментировать
Нравится 2 Комментировать

Нужно больше информации, что именно за приложение и какие из ‘аспектов десктопности’ ему нужны.

Например, если нужно много формочек, к примеру для работы с данными в базе данных (наполнение, поиск, просмотр, анализ), без особой стилизации интерфейса, то я рекомендую (как бы я не ненавидел майкрософт) — microsoft visual studio + .net + WinForms. Запросы в базу данных лучше создавать в других инструментах (благо есть соответствующие . студии). Есть разные фреймворки и среды разработки для данной задачи но такого удобного и эффективного (по затратам времени на разработку) лично я не видел. Благодаря некоторым усилиям сообщества и слабого противодействия майкрософт, такой код оказывается еще и кроссплатформенным, т.е. мало того что приложения можно запустить на win/linux/mac (с оговорками, особенно лицензионная чистота, например установщика приложения) так еще и сама среда позволяет создавать так же удобно приложения для веб (.net asp, но я это направление настоятельно не рекомендую). Что касается версии, то если изначально приложение писать для 3-ей версии .net фреймворка, то оно сможет запускаться даже на winxp (с оговорками можно 4-ую). Еще момент, про который многие забывают, приложения .net могут разрабатываться (и это поддерживается visual studio) не только на c# но и на .net managed аналогах как vb.net, c++.net, f# и даже python.net (но нужно помнить что это языки, синтаксически совместимые с оригиналом, но подключить какой то модуль без портирования и пересборки не получится). Есть недостатки, попробуй любого разработчика .net попросить решить проблему мерцающего контрола (например грид или ричедит), плюс это не самый шустрый фреймворк и clr виртуальная машина дает о себе знать а еще многословность как в java.

Для c++ безоговорочный лидер рекомендаций — qt, кроссплатформенный и очень быстрый и удобный фреймворк (не только интерфейс). Конечно не получится лениво возекаться с мышкой как в ms vs.net но результат тоже будет хорошим.

Ответ написан более года назад
Нравится 1 1 комментарий
Habrahabren @Habrahabren Автор вопроса

Спасибо за подробный ответ! В целом, считаю что для меня в данный момент Qt + C++ идеальный вариант в плане скорости разработки и качества по сравнению с другими решениями вопроса данной тематики.
Все исчерпывающе понятно, хоть и половину языков/технологий здесь я не изучал на практике

bingo347

Дмитрий Беляев @bingo347 Куратор тега JavaScript
Crazy on performance.

Если интересует только винда, то лучшим решением пожалуй будет C# и если нужна поддержка старых версий винды, то с WinForms.

Насчет Electron.js — хорошее решение с низким порогом входа, работать будет не только на большинстве версий винды, но и под Linux и Mac. А насчет его производительности — эта байка идет не из-за того, что Electron медленный, а из-за кривых ручек большинства тех кто на нем пишет. Если писать нормально, с пониманием асинхронной природы JS, с вынесением бизнес логики в бэк часть и с асинхронным общением между бэк и UI частями — все будет работать достаточно быстро.
В комментах к вопросу упомянули VSCode — хороший пример как готовить Electron правильно.

Еще можно посмотреть в сторону tauri. UI пишется на веб технологиях (HTML, CSS, JS), бэк на Rust. Приложение будет гораздо легче, чем Electron и потенциально будет работать быстрее (хотя быстрее — это вообще мало от платформы зависит, кто и как пишет код тут гораздо важнее).
Тут нужно учесть 2 момента:
1. Если Вы никогда не работали с Rust, то в этот язык чуть тяжелее влиться чем в другие.
2. Tauri использует нативный WebView для UI, а значит придется учитывать кроссбраузерность.

Еще варианты:
C++ + Qt
Python + PyQt
Java с ее окошками

Ответ написан более года назад
Комментировать
Нравится 1 Комментировать

demon416nds

Дмитрий @demon416nds
Разработчик на чем попало

если приложение относительно простое по функционалу lazarus в помощь
и разработка быстрее и кросплатформенность на уровне и быстродействие вполне ничего
зы сейчас конечно набегут паскалененависники но не существует больше ни одной RAD с таким удобным интерфейсом
им бы еще прикрутить транскомпилятор для поддержки сишного синтаксиса как в билдере и тогда у большинства претензий вовсе не останется

Пишем десктоп-приложение на Python с помощью Tkinter

Знакомимся с библиотекой Tkinter — пишем на Python кросс-платформенный калькулятор, который рассчитывает вес человека.

Иллюстрация: Merry Mary для Skillbox Media

Антон Яценко

Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.

Десктопные приложения пишут на разных языках программирования: C++, C#, C, Python и других. Начинающим разработчикам проще всего использовать Python и его библиотеки для работы над графическими интерфейсами.

Одна из таких библиотек — Tkinter. Она входит в стандартный пакет Python и позволяет создавать приложения для Windows, mac OS и Linux. Давайте разберёмся, как устроена эта библиотека, и напишем десктопный калькулятор, помогающий рассчитать вес человека.

Что такое GUI и как с ним работать в Python

GUI (Graphical User Interface) — это графический интерфейс пользователя, оболочка программы, с которой мы взаимодействуем с помощью клавиатуры и мыши. На современных операционных системах почти все программы работают с графическим интерфейсом, и мы каждый день сталкиваемся с GUI: читаем статьи в браузере, набираем текст в редакторе или играем в игры.

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

Для работы с GUI в Python есть четыре библиотеки:

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

Знакомимся с Tkinter

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

Схематично работу с Tkinter можно представить в виде четырёх шагов:

Что здесь происходит:

  • Мы подключаем библиотеку Tkinter с помощью директивы import.
  • Создаём главное окно приложения, в котором будут размещаться все графические элементы.
  • Добавляем виджеты — визуальные элементы, выполняющие определённые действия.
  • Создаём главный цикл событий — он включает в себя все события, происходящие при взаимодействии пользователя с интерфейсом.

Ключевые объекты в работе с Tkinter — виджеты. Это аналоги тегов из HTML, которые позволяют создавать интерактивные и неинтерактивные элементы, например надписи или кнопки. Всего их 18, но чаще всего используют следующие:

  • Button — кнопки;
  • Canvas — «холст», на котором рисуют графические фигуры;
  • Entry — виджет для создания полей ввода;
  • Label — контейнер для размещения текста или изображения;
  • Menu — виджет для создания пунктов меню.

Понять работу с виджетами легче всего на практике. Но прежде чем к ней приступить, обсудим идею нашего первого десктопного приложения.

Создаём калькулятор для расчёта индекса массы тела

Мы напишем калькулятор индекса массы тела. ИМТ — это важный медицинский показатель, который позволяет оценить, есть ли у человека избыточный вес или ожирение. Он рассчитывается по следующей формуле: ​​

ИМТ = вес (в кг) / рост 2 (в метрах)

Результаты расчётов оценивают с помощью специальной таблицы. У врачей она имеет много градаций, мы же воспользуемся упрощённой версией:

Шаг 1

Запускаем Python и импортируем Tkinter

Писать код на Python лучше всего в специальной IDE, например в PyCharm или Visual Studio Code. Они подсвечивают синтаксис и предлагают продолжение кода — это сильно упрощает работу программиста. Весь код из этой статьи мы писали в Visual Studio Code.

Библиотека Tkinter предустановлена в Python. Поэтому её нужно только импортировать:

Шаг 2

Делаем эскиз интерфейса и продумываем логику приложения

Прежде чем писать код, необходимо ответить на несколько вопросов:

  • Какие данные мы хотим получить от пользователя и в каком виде?
  • Какое событие будет запускать расчёт ИМТ: нажатие кнопки, получение приложением всех необходимых данных или что-то другое?
  • Как будем показывать результат?

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

Схематично графический интерфейс нашего калькулятора будет выглядеть так:

Теперь попробуем реализовать интерфейс и работу калькулятора с помощью Python и Tkinter.

Шаг 3

Создаём основное окно и указываем название приложения

После импорта библиотеки в Python загрузим её методы:

Мы не указали размер окна, поэтому название приложения не помещается в него полностью. Исправим это с помощью метода geometry:

Шаг 4

Создаём виджет Frame для контроля за расположением элементов

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

  • pack — используется, когда мы работаем с контейнерами для элементов. Позволяет позиционировать кнопки, надписи или другие элементы внутри контейнеров.
  • place — позволяет позиционировать элементы, указывая точные координаты.
  • grid — размещает элементы по ячейкам условной сетки, разделяющей окно приложения.

Мы воспользуемся комбинацией методов pack и grid. Для начала создадим виджет Frame для размещения надписей, полей ввода и кнопок. Подробное описание работы виджета есть в документации. Мы же используем только два свойства: padx и pady.

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

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

Добавим вторую надпись о весе аналогичным образом, но при позиционировании в grid укажем следующую, четвёртую строку:

Теперь добавим поля для ввода пользовательской информации, используя виджет Entry:

Всё получилось. Остаётся по аналогии добавить поле ввода веса:

Теперь добавим кнопку, которая будет запускать расчёт ИМТ. Сделаем это с помощью виджета Button:

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

Шаг 6

Получаем информацию из виджетов Entry и рассчитываем индекс массы тела

Напишем простую функцию и разберём её построчно:

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

Приведём код полностью без комментариев

from tkinter import * from tkinter import messagebox def calculate_bmi(): kg = int(weight_tf.get()) m = int(height_tf.get())/100 bmi = kg/(m*m) bmi = round(bmi, 1) if bmi < 18.5: messagebox.showinfo('bmi-pythonguides', f'ИМТ = соответствует недостаточному весу') elif (bmi > 18.5) and (bmi < 24.9): messagebox.showinfo('bmi-pythonguides', f'ИМТ = соответствует нормальному весу') elif (bmi > 24.9) and (bmi < 29.9): messagebox.showinfo('bmi-pythonguides', f'ИМТ = соответствует избыточному весу') else: messagebox.showinfo('bmi-pythonguides', f'ИМТ = соответствует ожирению') window = Tk() window.title('Калькулятор индекса массы тела (ИМТ)') window.geometry('400x300') frame = Frame( window, padx=10, pady=10 ) frame.pack(expand=True) height_lb = Label( frame, text="Введите свой рост (в см) " ) height_lb.grid(row=3, column=1) weight_lb = Label( frame, text="Введите свой вес (в кг) ", ) weight_lb.grid(row=4, column=1) height_tf = Entry( frame, ) height_tf.grid(row=3, column=2, pady=5) weight_tf = Entry( frame, ) weight_tf.grid(row=4, column=2, pady=5) cal_btn = Button( frame, text='Рассчитать ИМТ', command=calculate_bmi ) cal_btn.grid(row=5, column=2) window.mainloop()

Что дальше?

Узнать о возможностях Tkinter и особенностях работы с виджетами можно в официальной документации. А если хотите найти больше реальных примеров для практики, советуем две книги:

  • Python GUI Programming with Tkinter. Develop responsive and powerful GUI applications with Tkinter, Алан Мур.
  • Tkinter GUI Programming by Example, Дэвид Лав.

Больше интересного про код в нашем телеграм-канале. Подписывайтесь!

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

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