Python — десктопное приложение с графическим интерфейсом
Python имеет встроенный пакет GUI, который позволяет легко создавать такие формы:
В этом примере используется пакет tkinter. Форма выше принимает значение, введенное в поле ввода, возводит его в квадрат и отображает обратно в поле ввода, таким образом, квадратную кнопку можно нажать снова. Довольно стандартное приложение.
Интересная часть этой статьи — сделать приложение автономным и отправить его кому-то, у кого не установлен python и не нужно работать с консолью. Это 3 маленьких шага, необходимых для написания кода:
- Сохраните код Python как *.pyw
- Установите «pip install pyinstaller»
- Создайте исполняемый файл с помощью «pyinstaller -w InputOutputConsole.pyw»
Когда вы выполните эти шаги, результат будет сохранен в той же папке:

В папке dist находится EXE-файл, который может запустить небольшое приложение. Код приложения здесь:
from tkinter import * class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.grid() self.create_widgets() def create_widgets(self): self.display_label = Label(self, text="Enter value to square:") self.display_label.grid(row=0, column=0) self.input_field = Entry(self, bd = 5) self.input_field.grid(row=0,column=1) self.result_label = Label(self, text="Result will be here:") self.result_label.grid(row=1, column=0) self.calculation_button = Button(self, text="Square!", command=self.calculation) self.calculation_button.grid(row=3,column=3) self.quit_button = Button(self, text="Quit", command=self.master.destroy) self.quit_button.grid(row=4,column=10) def calculation(self): new_val = int(self.input_field.get())**2 self.result_label['text'] = new_val self.input_field.delete('0', 'end') self.input_field.insert('0', str(new_val)) if __name__ == "__main__": app = Application() app.mainloop()
Это небольшой пример того как можно реализовать десктопное приложение с помощью Python
Сделать сборку под OSX можно при помощи утилиты dmgbuild
Что не нужно делать при помощи Python

Несмотря на масштабное использование Python в разных сферах IT, он все же не является идеальным решением для некоторых задач. Есть более подходящие ЯП для реализации следующих процессов.
Разработка игр
Да, мы тоже знаем, что в Python есть библиотека Pygame, которая подходит для разработки игр, но вопрос “каких?”. С ее помощью можно создать примитивную “Змейку”, а вот на что-то большее она не способна.
В библиотеке не найдется и четверти функций, которые нужны хотя бы для обычной аркады или маломальского шутера.
Для геймдева идеальным инструментом станет С++. Он сегодня является самым востребованным языком для реализации игровых движков. В нем также имеются все инструменты для отличной графики и звукового сопровождения. Даже ботов на базе искусственного интеллекта можно с легкостью внедрять в игру, написанную на С++.
Кроме того, для создания полного жизненного пути игры подойдут Java, JS и C#.
Десктопные приложения
И для реализации десктопных приложений имеются библиотеки, по типу Tkinter. Последняя позволяет сделать какой-никакой GUI – графический интерфейс пользователя, но он не будет иметь ничего общего с качественным продвинутым продуктом. Приложение можно реализовать только со стандартным и примитивным интерфейсом.
Для чего-то более глобального и стоящего лучше использовать C#, С++ и Java.
Напоследок
Также Python не лучшее решение для реализации проектов, требующих высокой скорости выполнения кода. Если важна каждая секундочка – лучше использовать другие более быстрые языки программирования. Да, его не рекомендуют использовать именно для масштабных продуктов по типу ОС, микропроцессоров и космических аппаратов НАСА, но для остального он вполне сносный.
А к более быстрым и оправданным языкам программирования можно отнести С и С++.
Больше интересных новостей

Изучение Laravel за час! Создание сайта на PHP + Laravel

Как создать свою криптовалюту?

Что такое вебхук? Разбираемся на практике

Изучение основных принципов ООП в программировании
Комментарии (1)
Alex 06 декабря 2022 в 09:11
Как сделать десктопное приложение с python-бэкендом
Написал GUI приложение на Python с использованием PySimpleGUI.
Теперь хочу разделить его на фронтенд и бэкенд и сделать его кросс-платформенным, но не знаю, как это сделать более правильно. Желательно при этом получить 1 бинарник, который можно просто запустить и работать.
Можно, конечно, его просто скомпилировать через Pyinstaller под любую платформу, но может быть есть более интересные варианты, например flask + flutter (не знаю, можно ли будет это собрать в единый файл потом)?
Пока приложение будет использоваться внутри организации, нужно сделать его максимально модульным и модифицируемым. И ещё возможность для доработки её под коммерческое использование в дальнейшем.

the_real_kinik ★★
17.10.23 18:45:55 MSK
- Ответить на это сообщение
- Ссылка
Желательно при этом получить 1 бинарник, который можно просто запустить и работать
Вы сначала разберитесь, что такое фронт и что такое бэк, и уточните что же вы всё-таки хотите?
Полноценное приложение с клиент-серверной архитектурой или же вариант кроссплатформенного распространения.
vvn_black ★★★★★
( 17.10.23 18:48:46 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от vvn_black 17.10.23 18:48:46 MSK

вариант кроссплатформенного распространения
Второе, но сейчас мой код выглядит как 3 класса на 750+ строк, что сложно чинить, и в целом читать. Хочу разбить это на большее количество модулей и так, чтобы GUI просто вызывал отдельные функции и можно было легко поменять или GUI или основные функции.
the_real_kinik ★★
( 17.10.23 19:05:47 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка

1 бинарник, который можно просто запустить и работать
Придётся выбрать что-то одно
alex1101 ☆
( 17.10.23 19:12:35 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от the_real_kinik 17.10.23 19:05:47 MSK

Изучи паттерны проектирования. Для GUI, для твоих целей есть mvc, mvvm и подобные. MVC можно применять и с pysimplegui.
Landgraf ★★★★★
( 17.10.23 19:27:37 MSK )
Последнее исправление: Landgraf 17.10.23 19:28:44 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от Landgraf 17.10.23 19:27:37 MSK
А ещё есть фреймворки, даже два. )
vvn_black ★★★★★
( 17.10.23 19:33:24 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка

Ты хочешь десктопную приложуху с серверной архитектурой? Зачем? Не, ну если очень хочется то пусти multiprocessing, в одном сервер в другом клиент. Потом какой-нибудь pyinstaller или freeze или прочие чтоб сделать бинарь
Но идея так себе, если честно
upcFrost ★★★★★
( 17.10.23 20:20:31 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Можно попробовать nuitka собрать в бинарь, или посмотреть как делают крупные приложения вроде calibre
ac130kz ★
( 17.10.23 20:30:01 MSK )
- Ответить на это сообщение
- Ссылка

Желательно при этом получить 1 бинарник, который можно просто запустить и работать.
Можно попробовать — mojo.
th3m3 ★★★★★
( 17.10.23 21:19:29 MSK )
- Ответить на это сообщение
- Ссылка
Почему ты вообще хочешь в одном приложении совместить веб клиент и веб сервер? Если же это не веб, то при чем тут flask?
Aswed ★★★★★
( 18.10.23 09:42:00 MSK )
- Ответить на это сообщение
- Ссылка
а почему не PyQt ?
x905 ★★★★★
( 18.10.23 10:13:18 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Landgraf 17.10.23 19:27:37 MSK

Похоже, это именно то, что я и хотел сделать, но не знал, как сформулировать. Спасибо!
the_real_kinik ★★
( 18.10.23 10:22:58 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от upcFrost 17.10.23 20:20:31 MSK

upcFrost , Aswed
Про разделение на сервер-клиент прочитал на StackExchange в ответ на вопрос, как совместить Python и Flutter, но это действительно плохая идея – оверинжиниринг на ровном месте.
the_real_kinik ★★
( 18.10.23 10:25:40 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от x905 18.10.23 10:13:18 MSK

Насколько я понял, если я захочу собрать все в один standalone бинарник, то я должен платить за коммерческую лицензию Qt.
the_real_kinik ★★
( 18.10.23 10:26:39 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от vvn_black 17.10.23 19:33:24 MSK

А какие это фреймворки?
the_real_kinik ★★
( 18.10.23 10:27:03 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от the_real_kinik 18.10.23 10:27:03 MSK
Питон-биндинги к Qt и wxWidgets.
vvn_black ★★★★★
( 18.10.23 10:32:10 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от vvn_black 18.10.23 10:32:10 MSK

Интересно, спасибо! Выглядит лучше, чем tk из Python.
the_real_kinik ★★
( 18.10.23 10:35:42 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от the_real_kinik 18.10.23 10:35:42 MSK
Вариант отложить питон и сделать приложение на Flutter + Dart тоже имеет смысл рассмотреть.
vvn_black ★★★★★
( 18.10.23 10:40:56 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от the_real_kinik 18.10.23 10:26:39 MSK
если я захочу собрать все в один standalone бинарник
а от этого есть какаято выгода ?
x905 ★★★★★
( 18.10.23 10:43:17 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка

так просто же делаешь веб проект и прописываешь запуск бравзера вместе с сервером на иконке запуска
Syncro ★★★★★
( 18.10.23 11:54:07 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от vvn_black 18.10.23 10:40:56 MSK

Да, если будет время, то сделаю это на следующем этапе. Сейчас хочу завершить Python-версию.
the_real_kinik ★★
( 18.10.23 12:00:51 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от x905 18.10.23 10:43:17 MSK

Пользоваться программой будут инженеры неайтишники, поэтому чем проще запустить программу, тем больше вероятность, что ей будут пользоваться. А в дальнейшем, возможно, выложим ее в общий доступ. Когда будет не стыдно показывать общественности.
the_real_kinik ★★
( 18.10.23 12:01:59 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Syncro 18.10.23 11:54:07 MSK

Пока приложение сделано так, что на вылазит много окошек при нажатии кнопок. Думаю, неудобно такое переписывать под браузер.
the_real_kinik ★★
( 18.10.23 12:03:17 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от the_real_kinik 18.10.23 12:03:17 MSK

не самый простой кейс, но возможно и такое делать, есть нативный компонент dialog, с которым пару лет назад я помню один косяк в некоторых не очень популярных браузерах, который я тогда как-то тогда обошел (кажется рендерил дивами в этих кривобраузерах)
вместе со своими компонентами CustomElements и можно делать модульный код любой сложности, простой пример реализации можно посмотреть тут:
Но конечно стартовать вместо браузера свое приложение после сервера никто впринципе не запрещает. Хотя в духе линукс-вея надо просто чтобы было два пакета: один из которых стартуется сервисом systemd/init, а другой — который с гуем запускается с иконки.
Syncro ★★★★★
( 18.10.23 12:26:54 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от the_real_kinik 18.10.23 12:01:59 MSK
Пользоваться программой будут инженеры неайтишники
myProgSetup.exe + myProg.deb и проблема решена инсталлятор еще и иконку на раб-стол сделает
чем проще запустить программу, тем больше вероятность, что ей будут пользоваться
больше вероятность, что будут пользоваться полезной программой, а не той которая запускается «просто» )
x905 ★★★★★
( 18.10.23 12:42:00 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от vvn_black 18.10.23 10:40:56 MSK
Ну и ещё один просто убийственный вариант — Golang + Fyne. Судя по тому, что ТС в качестве гуйни выбрал PySimpleGUI, софтина у него небольшая и несложная. Переписать на Go с Fyne можно легко и непринуждённо. Опять же, мой вариант прекрасно компилится в один бинарник.
FatPinguin ★
( 19.10.23 18:28:41 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от FatPinguin 19.10.23 18:28:41 MSK

Интересная идея, спасибо!
the_real_kinik ★★
( 20.10.23 09:58:23 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
qulinxao3 ★
( 13.11.23 13:26:18 MSK )
- Ответить на это сообщение
- Ссылка
Интерпретатор пистона и так кросс. Делаешь пакет, который ставится через пип, он добавляет команду и ей запускается сервер, а потом открывается ссылка в браузере. Так работает pgadmin4. У нас так банковское по распространялось в виде self-hosted приложений. Можно еще дополнительно в докер все завернуть и тогда люди, незнакомые с питон смогут без секса с версиями интерпретатора и виртуальными окружениями запускать твое поделие. Но докер на винде вроде wsl требует, а в линуксах питон стал системным интерпретатором и с некродистрами проблема будет, где древний питон стоит, который не подлерживает аннотации и тп. А вся эта вебня давно обосновалась на компах. Я еще в начале нулевых ковыряя файлы игр оьнаружил что у многих лаунчеры — это тупо html/css/js
rtxtxtrx
( 13.11.23 19:10:29 MSK )
- Ответить на это сообщение
- Ссылка
Как сделать десктопное приложение на python
Как создать исполняемое приложение Python в MacOS и Windows. Десктопное приложение с помощью Tkinter
Ускоренный Курс Django С Нуля За 1 час | Пишем Веб Приложение На Python + Django
Работа с HTTP в Python. Библиотека requests. Модули в Python
Django Уроки Для Начинающих | Урок №7 | Git | Программирование Азы
Sockets или как создать полноценный сервер на Python в домашних условиях #2 | Базовый курс Python
Django Уроки Для Начинающих | Урок №3 | Urls.py | Программирование Азы
Python для начинающих за 1 час // Урок 2 от Skypro
Python для начинающих аналитиков // Урок 1 от Skypro
TOP-5 самых популярных YouTube каналов среди моих подписчиков. Google API. PyQt5.
Python 3 Уроки Для Начинающих | Django уроки | Django в веб разработке | Программирование Азы
Django Уроки Для Начинающих | Урок №7 | Git | Программирование Азы
Django Уроки Для Начинающих | Урок №6 | Задание 1 Решение | Программирование Азы
Основы Matplotlib. Визуализация данных. Графики и диаграммы в Python
Уроки PHP для начинающих / #2 – Локальный сервер. Вывод информации и комментарии
Уроки PHP для начинающих / #1 – Введение в язык PHP. Что такое PHP и как с ним работать?
Базы данных в Python. Использование ORM Peewee #4 | Базовый курс. Программирование на Python
Как парсить динамические web сайты в Python. Beautiful soup 4.
Онлайн-урок. HTML, CSS. Учебный Центр Бейсик
Python-разработчикам больше не нужен JavaScript. Brython, или Python в браузере
Django Уроки Для Начинающих | Урок №4 | Templates | Программирование Азы
Django Уроки Для Начинающих | Урок №2 | Краткий обзор проекта | Программирование Азы
Django Уроки Для Начинающих | Урок №5 | Задание 1 | Программирование Азы
Модуль для управления OS в Python | Базовый курс. Программирование на Python
А/B тестирование и анализ данных в Python // Урок 6 от Skypro
Django Уроки Для Начинающих | Урок №1 | Установка Django | Программирование Азы
Визуализация данных с помощью Python // Урок 5 от Skypro
Урок Python БЕСПЛАТНО для начинающих // #3 от Skypro
Как парсить статические Web сайты в Python. Beautiful soup 4
Socket или как создать собственный сервер на Python в домашних условиях #1 | Базовый курс Python
База данных SQLite в Python. ORM, peewee #3 | Базовый курс. Программирование на Python
