Почему Desktop-приложение на Питоне?
Если Вы, как и я, решили впервые взглянуть в сторону Python после нескольких попыток изучения С++/C# то скорее всего первым проектом станет desktop-приложение. Отходя от темы скажу что тяга к изучению этих языков была безнадежно утрачена в виду классического преподавания в духе "лишь бы сдали" и бесчисленных однотипных и монотонных лекций. Как я сказал выше хоть и на начальном уровне, но я всё же касался разработки приложений для Windows и поэтому мне хотелось посмотреть на принципы работы питона сначала отсюда(а не прыгать в django и прочие мощные фреймворки). Должен предупредить - в статье не приводятся выдержки из кода и она является скорее выражением моих эмоций, полученных за этот проект.
Какое приложение создавать?
В этом я не сомневался ни секунды и сразу выбрал - ТАЙМЕР! Я люблю засыпать под звуки фильмов с различных ресурсов, но то что после их окончания комп работал лишние 6 часов меня решительно не устраивало. Я конечно знаю про существование разного рода приложений с подобным функционалом(например SMtimer), но во-первых его UX/UI это просто привет нулевым, а во-вторых хотелось всё-таки своё.
Задачи намечены - время действовать
Посмотрев полтора гайда с youtube преисполнился и написал первый прототип с использованием стандартной библиотеки tkinter. Выглядело это весьма сомнительно с точки зрения того же UX/UI, но это уже было что-то
Тут каждый может заметить и сказать "но ведь это ещё хуже чем SMtimer" и будут правы, в целом и меня посещали такие мысли и я решил обратиться к поиску чего-то что сможет сделать из этого адекватное приложение которым я смогу пользоваться без зазрения совести.
CustomTkinter или как я пытался познать дзен
После недолгого поиска я нашел его - CustomTkinter. Он обещал буквально сделать из моего прототипа приложение, которое будто изначально было в Windows 10. Непосредственно exampl'ы вы можете смотреть ниже:
Вдобавок к этому библиотека обещала и минимальные правки кода для переноса моего "прототипа" на эту прелесть, но мне предстоял ещё большой путь в понимании как это тут работает...
Куча проблем и нехватка понимания
Именно так бы я описал свой путь в познании этой библиотеки. Буквально пытаясь взаимодействовать с ней я понял как устроены типы данных Python(да, может показаться смешным, но когда впервые встречаешь NoneType слегка удивляешься), понял как взаимодействовать с объектами классов и собственно разделять код проекта на функциональные блоки (что до этого мне казалось чем-то странным). Но для того чтобы понять насколько всё было грустно в моих познаниях - вот референс который я запилил от безысходности( на тот момент я хотел получить хотя бы это):
Проблем была целая гора - я решительно не мог понять как общаться с CusomTkinter - создание и позиционирование его объектов хоть сейчас и кажутся достаточно логичными и понятными, но тогда они были для меня сродни китайским иероглифам. После нескольких вечеров, проведённых за курением мануалов я смог собрать 3ю версию (её первая реинкарнация):
Получив это я уже был рад, что не сдался и приступил к починке расположения всех объектов по экрану. Однако следует упомянуть о "маленькая проблема" - в CustomTkinter нет SpinBox, а значит вводить данные было нужно либо с клавиатуры, либо искать как сделать этот самый SpinBox самому. Выбор пал на второй вариант, на сайте, посвященном самому ctk автор сделал FloatSpinBox, доработав который я уже мог получить то что хотел.
Главным его косяком было отсутствие реакции на колёсико мышки - для меня это было критично - нажимать 32 раза для установки минут меня не прельщало и я решил допилить его самостоятельно:
Добавил min и max value - теперь я мог использовать этот класс и для минут и для часов (сначала я просто наспамил несколько классов где вручную установил ограничения для каждого из них)
Реакция на колёсико мышки теперь охватывала весь SpinBox и это было чудесно. Если просто повесить обработчик на self.bind("MouseWheel", self.on_mouse_wheel)" то срабатывание будет только на границах entry и элементах кнопок, что просто ужасно.
-
Ну и конечно реализовал прокрутку в обратную сторону. Это так странно делать то что обычно реализовано уже за тебя.
Ну и немного поиграл с темами самого customtkinter:
Наконец то, что я и хотел получить
Теперь я решил сделать вывод времени до срабатывания. Я прорабатывал разные версии этого таймера и пришел к тому что запилил TimeBox. Главное отличие - никаких кнопок. Вывод конечно же стал гораздо веселее.
После того как я насмотрелся на кастомные темы с просторов github я решил, что мне такого ужаса точно не нужно и вернулся к истокам - стандартной зелёной теме. Победив эффект циклопа (даже 3х) я добавил переключение тем и поправил логику приложения - перезагрузка. выключение, сон и блокировка работают на ура ну и два вида условий таймера - через промежуток времени и В конкретное время. Я был полностью доволен и буквально счастлив что теперь мне не нужно каждый день идти в планировщик заданий и выставлять время выключения вручную! Но тут я увидел то, что впоследствии переведет меня из Notepad++ (да, да, именно там я и писал свой проект до этого момента). Это была библиотечка pywinstyles, обещающая эффекты прозрачности как из win7 но в стиле десятки. То что нужно.
Мне показалось это просто идеальным дополнением моей програмки. Запускаешь поверх фильма и не мешает и знаешь сколько времени осталось - красота. Но полное отсутствие документации и внятных sampl'ов заставило заново пересмотреть перспективы проекта. Я написал автору pywinstyles и с его описанием я таки смог заставить работать это всё вместе:
Если тут есть такие же странные люди, которые решат потрогать pywinstyles - будьте готовы к множеству проблем. К примеру после смены темы на прозрачную назад вернуть никак. Только перезапуск. У main_frame от ctk тут беловатый фон, что заставляет программу "сиять" на светлых фонах.
Выводы
Я получил то, что хотел и кучу необходимого опыта сверху. В будущем хочу реализовать автоматическую остановку таймера. В случае если фильм ставиться на паузу то и сам таймер останавливается. Как это реализовать при просмотре фильма из браузера я пока не знаю, но если у Вас есть идеи - с радостью почитаю.
Комментарии (90)
Zexyl
26.08.2023 16:39+1Но тут я увидел то, что впоследствии переведет меня из Notepad++ (да, да, именно там я и писал свой проект до этого момента).
Ощущение, как будто фраза оборвана на половине. Переведёт куда? Также:
Раработка
Psychosynthesis
26.08.2023 16:39+4А потом питон снова обновит версию, и вдруг выяснится, что "ваша версия операционки больше не поддерживается версией питона которую мы используем в разработке, так что до свидания".
Для прототипирования может и ок, но нормальное ПО на этом мусоре писать - дурной тон.Ritan
26.08.2023 16:39+6Ну или придётся делать так, как делает большая часть более-менее сложного софта на питоне - таскать за собой всё. Или банально - в виде бинарного дистрибутива или кокетливо, используя virtualenv, conda или ещё 10000 подобных им инструментов для решения проблемы, которой не должно было существовать.
SquareRootOfZero
26.08.2023 16:39+30У меня несколько написанных для себя программ на Питоне живут ещё с Windows XP и версии Питона, кажется, 2.4. Пережили переход на Висту, 7 и 10, и на большинство последующих актуальных версий Питона (переход на Python 3 потребовал некоторых правок). ЧЯДНТ? Между тем, многий софт, обычный, сишный, где Питона никакого нет даже в следовых количествах, внезапно, "начиная с такой-то версии мы не поддерживаем Windows 7". Мусор — он не в Питоне, он в головах.
MountainGoat
26.08.2023 16:39+2Дело не в "живут ещё с", а в том, как написать программу на Питон 3.11, а потом выяснить, что версия под Win7 ещё нужна.
SquareRootOfZero
26.08.2023 16:39+3Перевести на Питон 3.8 сильно сложнее, чем из программы на C++ выкинуть все API, добавленные после Windows 7? Или почему там они перестают старую винду поддерживать.
MountainGoat
26.08.2023 16:39Да, сильно. WinAPI не часто бывает размазан по всей программе, да ещё чтобы везде новый. Питон 3.8 - 3.11 это во многом новые синтаксические плюшки. Для отката назад может потребоваться переписать почти каждую строчку всей программы. Да и приятного мало возвращаться назад в упоротый синтаксис тех type hint-ов.
Поэтому вместо этого костылят как запустить новый Питон на семёрке, и всё это глючит.
kisskin
26.08.2023 16:39У меня десктопный софт, написанный на Delphi 5 (это 1997 или 1998 год) работал в Win2k, XP, 2008 server, 7, сейчас работает в 10, а в 11, надеюсь, не скоро придётся проверять, но уверен, что справится. Менять мне в нем не пришлось ничего. А вот чужой десктопный питонный софт на 7-ке уже не запускается принципиально. Так что там насчёт "многого софта"?
me21
26.08.2023 16:39+2Ну это любой софт в какой-то момент может по желанию разработчиков перестать поддерживать определенную версию Windows.
jogick
26.08.2023 16:39+5Программа написанная для диплома в 2013-м году, ещё под XP во втором python (выводила данные от разработанной железки), работает на новом Debian'е, всё что потребовалось поменять import Tkinter as tk на import tkinter as tk
SUNsung
26.08.2023 16:39-1Какая же жиза жизовая
У этого говнопитона на сейчас есть три (!!!) версии в третей версии, которые между собой не дружат.
Ладно бы новый функционал, но нет сломали обратную совместимость.
И это все 3 версия. Делали бы уже нормально, не поддерживаемое говно назвали бы 4 питоном.
А недавно столкнулся под KDE с тем, что одно приложение использует 3.2, а другое 3.8. Прописать на запуск не помогает потому как там внутрм вызовы "python3". И для того что бы работало одно приложение надо менять глобально версию по умолчанию. Такой сюр.
Andrey_Solomatin
26.08.2023 16:39Ну совместимость там в одну сторону. Не всё со всем.
Помотрите на https://docs.python.org/3/library/venv.html, просто запускаете каждое преложение в своём виртуальном окружении.
Между 3.2 (который уже более 6 лет не поддерживается) и 3.8 большая разница по версиям зависимостей, минимальня версия часто ползёт вместе с поддержкой версиии языка. Я бы сделал ставку что ваша несоместимость где-то здесь. Пользуйтесь виртуальным окружением.
Teamer_ol
26.08.2023 16:39Если я правильно понимаю планы тех, кто ведёт разработку языка Python и интерпретатора CPython, то они не собираются выпускать новые версии языка, ломающие обратную совместимость.
А какие технологии вы считаете не "мусором" (очень оценочное суждение, но ладно) для написания нормального ПО?
Заранее благодарю за ответ.
Psychosynthesis
26.08.2023 16:39Не могу сказать, что имею прям стройное представление о каком-то эталоне...
Везде какие-то свои костыли... Где-то более костыльные, где-то менее. По ощущениям С++ до сих пор позволяет нормальные программы писать для абсолютного большинства платформ, без всех этих диких связей с зависимостями (на самом деле понятно что с ними, но их можно паковать довольно компактно внутрь бинарника без всяких шизоплясок в духе "запакуй среду выполнения с докером в инсталлятор целиком", что выглядит просто бредом).
Хотя тут верно сказали, от разработчика многое зависит, субъективно полно программ которые хоть и написаны на крестах, ради пары каких-то функций тащат с собой целые фреймворки .net, там тоже шиза та ещё.Возможно у раста дела получше, не знаком с вопросом.
HELLSP4RK
26.08.2023 16:39-1Глупость какая. Каким это питоном какая версия Windows перестала поддерживаться? Десятки тысяч компаний "нормальное ПО на этом мусоре" пишут и у все нормально работает
Anton_Zimyanin
26.08.2023 16:39Для этого придумали .venv + есть docker, который убирает даже намек на расхождение версий.
Чек Insomnia, эта прога написана на "мусоре", но являются приятной глазу и в скорости не уступает Postman.
Andrey_Solomatin
26.08.2023 16:39Пока гении нос воротят, люди делают нормальное ПО и у них остаётся время на написание статьи. Можно например запаковать Питон в инсталятор.
dyadyaSerezha
26.08.2023 16:39+4Кнопки обычно располагают рядом, а тут они сильно разнесены.
Цифры можно вводить клавиатурой?
Что такое значок полумесяца?
Установка времени мышкой - самая удобная в некоторых прогах на Андроиде. Там круг часов и минут, делается все очень быстро
Не понял, зачем постоянно видет, сколько осталось до выключения. Я бы лучше показал окно только за 1 мин или 30 сек до выключения.
Автовыключение по завершению фильма на неком сайте можно сделать двумя путями: (а) написать плагин/эддон для браузера и выклюяать комп оттуда (или передавать некий сигнал внешней проге по собственно выключению), и (б) стартовать браузер из специальной проги типа chrome driver, которая автоматизирует работу с браузером и позволяет искать всякие элементы на страничке и взаимодействовать с ними.
Есть правда ещё один способ - когда запустил прогу, замерять уровень загрузки cpu/gpu и следить за ним. Как только он резко упадёт, то значит, что фильма кончилась
Можно ещё добавить кпопки snoose с разными вариантами - 5,10,15,30 мин - и показывать их только за секунд 15-30 до выключения.
SquareRootOfZero
26.08.2023 16:39+9Мосье знает толк в извращениях. Возьмите PyQT или wxPython и не мучайтесь. Нормальный виндовый гуй, выглядящий как нормальный виндовый гуй.
HemulGM
26.08.2023 16:39+3Мосье знает толк в извращениях. Возьмите нормальный компилируемый язык и не мучайтесь. Тот же C++ с Qt, C# с WPF (или Avalonia) или Delphi с FMX. Нормальный виндовый гуй, выглядящий как нормальный виндовый гуй.
SquareRootOfZero
26.08.2023 16:39+3Ой-вей, мосье таки пробовали использовать это Qt c С++? Я только от чтения инструкций, как это всё собрать, о**ел и передумал. Дело было несколько лет назад, возможно, с тех пор лучше стало, возможно, нет, но для PyQT уже тогда работал банальный pip install. wxWidgets, правда, недавно заводил под Visual Studio — вот он приятно удивил, буквально один конфигурационный файл добавляешь в настройки проекта, и уже всё работает, даже зависимости прописывать не нужно. C# и WPF не люблю, Delphi не знаю и учить как-то не вижу смысла — если уж даже в период расцвета его популярности не выучил, то щас ради чего? Время от времени пишу гуй, на мой взгляд, Питон для него замечательно подходит, а для мелких поделок "для себя", наподобие описанной в статье, так и вовсе не представляю, чем бы он был плох.
ainoneko
26.08.2023 16:39"YMMV": у меня PyQT под Линуксом не заработал даже для hello-world.
(А QT для С++ нормально.)vladimiregorov74
26.08.2023 16:39А, что конкретно пошло не так? Просто я тоже столкнулся с подобной проблемой
me21
26.08.2023 16:39+1А зачем собирать, если можно ставить в собранном виде? В общем-то, что на Python, что на C++ использовать Qt проблем нет. Родной установщик Qt (Maintenance Tool) для C++ существует уже больше десяти лет.
SquareRootOfZero
26.08.2023 16:39Да я соберу, если прям надо будет, и, более того, как-то по работе даже собирал, но то по работе, а чтобы для себя таймер написать — как-то оно, мне кажется, того бы не стоило. Помню, что оно долго грузило всякими разными версиями и лицензиями и пр., и пр., а готовых бинарных сборок я тогда найти не осилил — если щас есть, ну ок, рад за них. Отметим, конечно, что и для Python можно вполне поиметь проблем с пакетами, которые туго собираются из исходников и только из исходников (Qt к ним, правда, не относится), и где вся надежда либо на безупречную прямоту собственных рук, либо на широко известный в узких кругах сайт Кристофа Голке, который уже больше года не обновлялся.
HemulGM
26.08.2023 16:39-1пробовали использовать это Qt c С++?
Честно? Почти нет. А когда пробовал - вообще не понравилось. Но его используют многие и типа хвалят. А я, т.к. в основном работаю на Делфи, попробовал так сказать что-то такое, после чего всё остальное меня не устраивает. Там создание сложнейшего GUI невероятно удобно, просто и почти без кода. Да, сам язык только начинает догонять не прекращавшие развиваться языки, но догоняет, а местами и так было лучше.
Но вы просто не пробовали действительно удобные инструменты для создания GUI. Кстати. Delphi имеет интеграцию с Питоном. Причем в обе стороны. Можно внутри Делфи использовать интерпретатор питона, а можно в Питоне подключить созданный в Делфи GUI. https://blogs.embarcadero.com/introduction-to-python-gui-development-with-delphi-for-python-vcl-fmx/
Т.е. качаешь бесплатную версию среды. Накидываешь фору (или формы). Для этого вообще код писать не надо. Выбираешь стиль или набор стилей или создаёшь вообще свой уникальный. И как в PyQt подключаешь всё это и используешь в Питоне.SquareRootOfZero
26.08.2023 16:39+1Если вы про редактор формочек, то и помимо Делфи всякого добра полно — я недавно какой-то wxBuilder использовал, накидываешь элементы, расставляешь стили, да, вообще код писать не надо, только для обработчиков событий. Хотя на Питоне мне чо-то нравится прямо весь гуй в коде создавать, C++ для такого слишком неуклюж, а на Питоне нормально.
HemulGM
26.08.2023 16:39+1В Делфи с этим пошли ещё дальше. Помимо дизайнера формочки, есть дизайнер стиля. Т.е. например. Ты хочешь особого вида кнопку. Ты открываешь ещё один дизайнер и тем же способом, что и в дизайнере формы создаешь собственный стиль этой кнопки (или поля ввода, элемента списка или таблицы и т.д.). Опять же визуально
Пример элемента списка
Daddy_Cool
26.08.2023 16:39+1Вы вот это имеете ввиду?
https://ru.wikipedia.org/wiki/WxFormBuilder
С новыми/другими системами есть проблема - неизвестно заранее, есть ли там что нужно и работает ли оно так как хочется. А Дельфи и С++ Билдер всё же развитые системы, там что угодно кажется есть.
Расскажите, какие плюсы у wxBuilder по сравнению с Дельфи?SquareRootOfZero
26.08.2023 16:39Я, извините, не могу рассказать, какие плюсы или минусы есть у чего-либо по сравнению с Дельфи, по причине полного незнания Дельфи. Трудно, очень трудно было избежать Дельфи, пытаясь быть программистом в российской провинции начала 2000-х, но вот мне как-то удалось.
Да и вообще было бы странно сравнивать редактор формочек WxFormBuilder со средой разработки Delphi, включающей в себя IDE и собственный компилятор для собственной версии Паскаля. Возможно, Delphi хороша — некоторые знакомые программисты в российской провинции начала 2000-х очень хвалили — но я ж просто даже упоминание Delphi встречаю впервые лет за десять. А когда на работе последний раз понадобилось делать гуй, уговорить начальство делать его на wxWidgets у меня кое-как получилось (эти интеллектуальные содомиты изначально планировали делать его на Unity), а на Delphi бы точно не смог...
chiga17
26.08.2023 16:39Писал несколько лет на C++ QT. Сейчас уже несколько лет использую wxWidgets с питоном. От последнего впечатления намного более приятные
Leetc0deMonkey
26.08.2023 16:39-13Зачем вообще нынче десктоп приложение? Чтобы потом переписать на веб-морду и микросервисы? Я понимаю, первый опыт, всё такое. Но не лучше ли начинать сразу приступая к чему-то более актуальному? Это как учить программирование по Паскалю, хотя нет никаких проблем начинать сразу с Жавы, в усечённом виде.
grumbler70
26.08.2023 16:39+6Зачем вообще нынче десктоп приложение?
Написано из десктоп либо мобильного приложения.
Чтобы потом переписать на веб-морду и микросервисы?
Маньячество с микросервисами до добра не доведёт
Leetc0deMonkey
26.08.2023 16:39-8Написано из десктоп либо мобильного приложения.
Написано из браузера, который де-факто стал OS системы представления.
Маньячество с микросервисами до добра не доведёт
Тут я иронизирую. Но что есть то есть.
HemulGM
26.08.2023 16:39+7Написано из браузера, который де-факто стал OS системы представления.
Который все ещё по факту - десктоп приложение.
Помимо этого, вся ОС (при чем совершенно любая) - это набор приложений, а не веб сервисов или веб-приложений.
Никто в здравом уме не пользуется браузером для чата в мессенджерах. Или вы для TG, WU, дискорд или Скайпа используете браузер? Нет. А Дискорд и Скайп вообще за вас его используют и как работают, норм?
Ну и давайте сделайте таймер отключения компа через веб сервис. Без нужды в отдельном "десктоп приложении" в виде веб-сервера.
Leetc0deMonkey
26.08.2023 16:39-6Который все ещё по факту - десктоп приложение.
И? Кто-то собирается становиться разработчиком браузеров? Надо признать что время десктопных приложений безвозвратно ушло. Я сам категорически против когда набегают смузихлёбы и начинают раскурочивать вполне работающий годами десктоп-клиент. Но стартовать новые проекты - нахрена? Если это конечно не какая-то специфика типа общения с локально воткнутым девайсом. И то, кажется, прогресс у броузеров и в этом плане какой-то присутствует. А если нет, как уже сказали, уже существуют вполне устоявшиеся кроссплатформенные стандарты типа Qt.
Никто в здравом уме не пользуется браузером для чата в мессенджерах. Или вы для TG, WU, дискорд или Скайпа используете браузер?
Внезапно, на десктопе это такие же веб-приложения, обёрнутые в какую-то хрень на базе Хрома. Электрон кажется называется.
Ну и давайте сделайте таймер отключения компа
Делайте. Удачи потом найти высокооплачиваему работу с такими "восстребованными" навыками.
HemulGM
26.08.2023 16:39+4Внезапно, на десктопе это такие же веб-приложения, обёрнутые в какую-то хрень на базе Хрома. Электрон кажется называется.
Я об этом сразу написал. Только это скорее проблема, а не преимущество
А Дискорд и Скайп вообще за вас его используют и как работают, норм?
Но стартовать новые проекты - нахрена?
Нахрена? А нахрена использовать абстрактную прослойку в виде API браузера, когда софт может куда быстрее, эффективнее и удобнее работать без прослойки? Да, создавать софт сложнее, чем веб-сайтики. Кто ж спорит. С таким же успехом можете использовать Java, которая по сути ничем не отличается от абстракции браузера со своим API, однако дает куда больше возможностей чем браузер. Равно как и с браузером достаточно написать один раз виртуальную машину под платформу и использовать один и тот же код для работы на всех платформах. Однако, софт под десктоп в большинстве своем пишется всё равно на нативно компилируемых языках. А почему - и так понятно. Скорость работы, уникальные для ОС возможности, отсутствие зависимости от какого-то там браузера и т.д.
Leetc0deMonkey
26.08.2023 16:39-3А нахрена использовать абстрактную прослойку в виде API браузера, когда софт может куда быстрее, эффективнее и удобнее работать без прослойки?
Набрал в адресной строке - и работаешь.
HemulGM
26.08.2023 16:39+4Кликнул два раз на ярлык и работаешь?
А с веб ещё и инета может не быть, или заблокируют или вообще политика в компании и доступ строгий и так далее.
Leetc0deMonkey
26.08.2023 16:39-4Кликнул два раз на ярлык и работаешь?
Только сначала скачай, установи. Потом регулярно обновляй. Какой-то привет из 90ых.
А с веб ещё и инета может не быть, или заблокируют или вообще политика в компании и доступ строгий и так далее.
Политика компании как раз в первую очередь и блокирует запуск всякой нативной хрени.
HemulGM
26.08.2023 16:39+7Ну видимо вы только в 90х и использовали нативный софт. Давно вы телеграм обновляли? А как сложно было скачать? Сколько часов в день тратите на установку телеграмма каждый раз?
А ещё представьте, как было бы здорово имеет такую программу, которая бы позволяла найти программу, установить в один клик и чтоб потом само обновлялось. А хотя подождите-ка, уже 8 лет как в Винде есть Microsoft Store, который все это давно умеет и делает.
И Steam с играми также поступает. Вот это прогресс.
А от современных сайтов и сервисов с тоной говно-рекламы уже блевать хочется.
Они не удобные, кривые, медленные, лагающие. Жрущие ОЗУ как не в себя. 7 вкладок и минус 6гб ОЗУ. Великолепно.
При этом все вирусы и все говно - это как раз из веб источников. С веб сайтов. Весь скам, ложные ссылки на сервисы, поддельные страницы. Спасибо веб сайтам и "безопасным" браузерам. А сколько было бы не будь адблока? Просто ужас.
Leetc0deMonkey
26.08.2023 16:39-3Ну видимо вы только в 90х и использовали нативный софт.
Именно так. Нет, я не против установить пару-тройку частоиспользуемых софтов. Или, не очень представляю какой-нибудь CAD в браузере. Но на каждый чих что-то скачивать и устанавливать. Данунахер.
Они не удобные, кривые, медленные, лагающие
Это проблема уровня разработчиков, а не платформы. В 90ые на Делфи тоже писали жирное неповоротливое гавно, а кто осиливал C и Win32API у того всё летало и скачивалось за полминуты на диалапе.
При этом все вирусы и все говно - это как раз из веб источников.
Да да. Не то что нативные приложения с доступом ко всем ресурсам ПК как у самого браузера, но только разработчика этого приложения уже никто ни в чём не останавливает.
HemulGM
26.08.2023 16:39Покажите софт делфи, который весит много и "неповоротливые говно". Хоть из 90х, хоть сейчас. Делфи всегда создавал быстрый софт с нативным интерфейсом. А сейчас и вовсе дальше ушел. А вот неповоротливых и кривых сервисов и сайтов я тебе десятки назову.
Leetc0deMonkey
26.08.2023 16:39-2У Делфи как раз не нативный интерфейс (был), а кастомные контролы. Делфи не мешал писать быстрый и компактный софт, но из-за низкого порога вхождения на нём писали и разработчики не самого высокого уровня. Писали как могли. Сейчас то же самое в вебом. Проектов с летающим фронтом и бэком тоже овердехрена. Это не проблема платформы, это следствие популярности и порога вхождения.
HemulGM
26.08.2023 16:39+2На Делфи самый первый фреймворк VCL является нативным и использует нативные контролы для разработки. Он позволял их кастомизировать в рамках возможностей ОС. Он всё это и даже больше позволяет это и сейчас. Софт на Делфи до 2010 года написанный штатными средствами является полностью нативным как с точки зрения кода, так и с точи зрения GUI. Только после 2011 года в штатной поставке появился кроссплатформенный фреймворк, который уже не использует почти нативные контролы, но при этом софт всё равно нативный для целевой платформы.
Единственная проблема, которая могла быть у новичков в Делфи, это то что мало кто умел и делал асинхронный, многопоточный код. И софт просто мог подвисать, однако скорость работы от этого не страдала. Страдал немного пользователь.
В веб же, тормоза являются следствием нагромождения слабо контролируемого кода из сотен зависимостей. Десятки запросов в разные части света для загрузки страницы. Проблемы с утечками (в JS!), отвалом скриптов со временем и т.д. Да, всё это из-за не компетентности, однако, речь ведь идет не о поделках отдельного разраба, а о крупных проектах. Ютуб, дискорд, скайп, ВК, да даже хабр местами косячит (фризит, тупит, ломается логика, даже как-то пагинация сломалась и роут возвращал на любой индекс страницы одну и ту же страницу). А другие сервисы, которыми я пользовался разово я даже не вспомню, но почти везде меня не устраивала их работа. То прыгающая страница, то не адекватная работа. Всё это не доставляет удовольствия.
Веб-сервис не стабилен и не надежен. Хоть в браузере, хоть в виде вебвью приложения.
SquareRootOfZero
26.08.2023 16:39+1Надо признать что время десктопных приложений безвозвратно ушло.
А мне казалось, читать Грэма давно стало немодно...
jogick
26.08.2023 16:39+3Надо признать что время десктопных приложений безвозвратно ушло
В вашем мире наверное да, но реальный мир им не ограничивается. Есть промышленность, энергетика, оборонка и т.п. Это большие отрасли, в которых применяют не очень мощные компы и менять их никто не будет. Как только попробуешь воткнуть туда что-нибудь на "браузерных технологиях" у видишь дикие тормоза и такое просто не примут.
SquareRootOfZero
26.08.2023 16:39+3Таймер, который отключает компьютер. Для веба. Я даже не удивлюсь, если в нашем дивном новом мире это уже возможно технически, но, троллейбусизхлеба.jpg, зачем??
Vpan
26.08.2023 16:39+1Автор захотел себе определенную софтину и сделал ее сам - и это прекрасно. DIY в мире программирования.
SquareRootOfZero
26.08.2023 16:39Вы веткой промахнулись, или что? Я не критиковал автора, а отвечал на комментарий, что надо было всё это делать не в виде десктоп-приложения, а в браузере.
Glideronic
26.08.2023 16:39Как минимум это куда интереснее, чем пресловутый To-Do List в качестве пет проекта.
Vpan
26.08.2023 16:39+3Автор - молодец, всячески поддерживаю. Сам сделал софтину для себя, сам пользуешься - это прекрасно.
16bc
26.08.2023 16:39+1Чего только люди не придумают и не изучат, лишь бы с qt не разбираться.
Кому интересно закрыть тему раз и навсегда:
QtDesigner + pyside6 + chatGPT (в дополнение к ущербной документации qt) = красивое приложение любой сложности.
muradali
26.08.2023 16:39-1Я бы сказал даже так - чего только люди не придумают чтобы писать все на питоне. Ну все равно нативные интерфейсы получатся хреново.
alekssamos
26.08.2023 16:39Так, ребята. Вы тут говорите о браузерах? В 2011 году я делал через HTA / VBScript программу. Обычная html страница с кнопками выключить или перезагрузить компьютер, извлечь дисковод и так далее. Вполне себе считается, да? И через WinRar SFX ещё сделал в добавок. Чем себе не программа?
И да. У меня Windows 11. Удивительно, но она запустилась и работает. Да!
Комментарий WinRar SFXPath=%temp%\s225f8x1\ SavePath Setup=test_hta5.hta Silent=2 Overwrite=1 Title=loading... Text { loading }
Сама HTA страница:
<html> <head> <title>Alexsoft</title> <HTA:APPLICATION APPLICATIONNAME="alexsoftapp" SCROLL="no" selection="no" showInTaskbar="yes" singleInstance="no" contextMenu="no" sysMenu="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize" > </head> <script language="VBScript">
Sub T1 MsgBox "привет." End Sub Sub T2 Set WMPlayer = CreateObject("WMPlayer.OCX.7") WMPlayer.CdRomCollection.Item(0).Eject() End Sub Sub T3 set s=createobject("Wscript.Shell") s.run "SHUTDOWN -s" close End Sub Sub T031 set g=createobject("Wscript.Shell") g.run "SHUTDOWN -g" close End Sub Sub T4 msgbox ""&date&" -дата," msgbox ""&time&" - время." End Sub Sub onload MsgBox "пока" WScript.Sleep 10 End Sub
</script> <body onunload="onload"> <noscript>ВНИМАНИЕ! ПРОГРАММА МОЖЕТ РАБОТАТЬ НЕ ПРАВЕЛЬНО.</noscript> <p>Моя програмка</p> <form> <input type="button" value="вывести сообщение" onClick="t1"> <br><input type="button" value="вынуть дисковод" onClick="T2"> <br><input type="button" value="выключить" onClick="T3"> или <input type="button" value="перезагрузить " onClick="T031">комп <br><input type="button" value="дата и время" onClick="T4"> </form> <p>вот такая простенькая програмка. вообще, делать можно всё что захочется.. а это так - для примера. <br><button onclick="window.close()";>закрыть</button> </p> </body> </html>
economist75
26.08.2023 16:39В домене HTA будет алармиться всем (антивирусами, GP-политиками), к сожалению. Но можно использовать EEL: https://habr.com/ru/articles/550426/
yokotoka
26.08.2023 16:39Рекомендую взглянуть на flet
Скрестили питона с flutter и его библиотекой виджетов
Из плюсов - кросплатформенность (desktop, mobile, web*), упаковка в один исполняемый бинарь
Из минусов - не очень большое комьюнити
kovserg
26.08.2023 16:39-1Взглянул. Сыроват. Например попробуйте в markdown текст выделить. Да и кросплатформенность так себе (desktop?, mobile, web?). Под win7 не работает хочет MFPutWorkItem2
Dinxor
26.08.2023 16:39+1Двадцать лет назад передо мной стояла задача: выбрать несложный инструмент для создания утилит для обработки текста, управления процессами и т.д. Связываться с монстрами типа Delphi не было ни времени, ни желания, хотя небольшой опыт на Паскале был. После недолгих поисков остановился на AutoIt, за 15 лет немало всего на нём написал, включая графические интерфейсы, работу с сетью и базами данных. Скрипт всегда компилировался в файл размером килобайт в 300 (это в 3 версии, во 2 было ещё раза в 3 меньше). И эти файлы, созданные в XP, сейчас легко запускаются на десятке! Про Пайтон слышал, но от перехода на него останавливало наличие двух версий и сложность компиляции.
Перешел всё-таки 6 лет назад, т.к. на нём есть отличные библиотеки для создания ботов, работы с MQTT и подобных вещей. Но иногда бывают ситуации, когда на AutoIt написать тупо проще. Например, программа должна работать с буфером обмена, хранить настройки в файле и прятаться в трей - там всё это есть "из коробки" и делается парой строк.
Но да, дизайнер из меня ещё тот - с красивостью интерфейса никогда особо не парился, главное функциональность.
Andrey_Solomatin
26.08.2023 16:39+1Моя первая программа, которой пользовался кто-то кроме меня, была именно на AutoIt.
У него узкая специализация, но в ней он очень хорош.
deucefield
26.08.2023 16:39Решая аналогичную проблему, всегда пользовался простым
советскимрешением:Win + R
, а затемshutdown -s -t %sec%
Andrey_Solomatin
26.08.2023 16:39Мне кажется, что проблема была не в выключении, а в поиске пет проекта. Её автор успешно решил, и многому научился. Технологии приходят и уходят, и умение изучать новое всегда пригодится.
mepos
26.08.2023 16:39Поразительно сколько отличных линуксовых программ не пользуются популярностью из-за нежелания их разработчиков написать нормальный гуй или хотя бы документацию по использованию. Именно это и удерживает большинство пользователей пк от перехода на линукс. Хотя есть софт в котором гуй на уровне мака и по сравнению с виндой как будто заменил жигули на космолет.
Возможно стоит попробовать ChatGpt для написания гуя под готовый софт. Не было такого опыта?
net_racoon
26.08.2023 16:39Зашел сюда в надежде получить ответ. Хочу запилить приложение-напоминалку под Убунту. Почитал здешние комменты, на чем писать то? :)
Sap_ru
26.08.2023 16:39Lazarus (Pascal) - кросс-платформено и умеет собирать бинарник.
C#+WinForms - Куча мелких багов, но работает.
Pyhton + Tcl - Уродское до зубной боли, но что-то несложное сделать можно. Через год потребует правок под новую версию Питона.
Pyhton + Qt - Есть проблемы с тасканием зависимостей после выхода новой версии
Python + Wx - Всё те же проблемы с зависимостями.
Java + SWT - При знании и умении отлично работает. Но нужно много знать и уметь. Требуется тягать Java.
Java + JavaFx - При знании и умении отлично работает. Нужно очень много знать и уметь ещё больше. Требуется тягать Java.
C++ + Qt - Вещь, но требует скилов. Зато можно даже статический бинарник собрать при желании.atshaman
26.08.2023 16:39Мнда. Как бы это сказать - написать "напоминалку" на python'е + TCL так, чтоб под новую версию переписывать пришлось - это прям упороться надо.
Sap_ru
26.08.2023 16:39Угу, и тут в Питоне очередной depricated выкатывают и приплыли. В лучшем случае куча ворнингов. В худшем - работать перестанет. Depricated сейчас удаляют через версию. То есть через версию Питона можно приплыть с заметной вероятностью.
atshaman
26.08.2023 16:39Ну вот смотрите - вы пишете про python+tcl "потребует правок под новую версию" - про python qt\wx - не пишете. Т.е. предполагаете, что проблемы вызывает именно TCL часть. Внимание, вопрос - какие?
Далее, исходный вопрос идет о "простом GUI-приложении" - я понимаю, развесистая вебня со списком зависимостей в мою руку длиной - или фризить версии, или что-нибудь да поломается уже на средней дистанции (А где у нас не так, по большому счету?) - но мелкая гуйня-то обо что? Из того, что я себе обозначил - разве что crypt много чего за собой потянет, но тут вроде как не нужен. Что и куда по вашему мнению "приплыть" должно?
И, кстати, почему оно не должно приплыть через месяцок если выбрать за основу какую-нибудь java8\11 или там qt5 в ubuntu?
Sap_ru
26.08.2023 16:39-1Просто забыл написать. Python при всех своих плюсах имеет проблемы с развёртыванием приложения либо с долгосрочной поддержкой.
Обо что поломается сказать трудно, но ломается раз в год сейчас. Изменения небольшие, но приходится править и пересобирать под актуальную версию.
Если не поломается само приложение, то поломаются зависимости. Более того, складывается ситуация, когда у вам нужно тянуть сразу несколько версий.
Например 3.10 поломала довольно много пакетов. Которые потом обновились, но что делать на Ubuntu на которой была только 3.10?
Потом это повторилось с 3.11. Они там то хедеры перенесут, то процесс сборки изменят, и все эти wheels рушатся со страшным треском.
Это не обязательно будет именно так, именно сейчас и именно с этим приложением, но риск весьма велик. Охватить несколько релизов той же Ubuntu одним вариантом исходников получается так себе.
С TCL ситуация чуть-чуть лучше только потому, что зависимостей меньше и оно быстрее начинает работать с новой актуальной версией Python.
Отличие от Java в том, что Java нет проблем тащить с собой нужную версию JVM на всех поддерживаемых платформах. Даже кучу вполне удобный костылей создали для этого. И даже без костылей, есть отличные портабельные сборки, на основе которых можно построить свой приложение. Простейший инсталлятор в Windows, простейший скрипт в Linux, и ваш софт работает работает с собственной версией JVM и зависимостями. Из минусов только размер приложения в 80 мегабайт. С костылями можно уложиться в 40..60.
В результате я сейчас могу запускать, написанное 5 лет назад очень большое и сложное приложение Java+JavaFx на всех версиях Linux и Windows, вышедших за это время. И даже на следующих версиях тоже смогу запускать. Прямо бинарники без всяких приседаний. А Python мне за это время принёс море боли три или четыре раза. То Ubuntu в новом релизе обновят версию до 3.11, а половина пакетов на нём глючит, то совместимость со старыми версиями потеряется. То правишь ":list[int]" на ":collections.List[int]" по всем исходникам, то обратно.
В 3.11 поменяли C-заголовки, что поломало кучу пакетов для работы HTTP-запросами. Было весело. Некоторые пакеты до сих не работают (привет brownie).
Просто сделайте stadalone приложение Python c Qt и все станет ясно. Это адский ад на всех платформах.SquareRootOfZero
26.08.2023 16:39ломается раз в год сейчас
Вы раз в год ставите мажорные обновления Python? Они ж, вроде, даже не выходят так часто, а минорные ничего не ломают?
что делать на Ubuntu на которой была только 3.10?
На Ubuntu нельзя держать параллельно несколько версий Python? Я на Windows когда-то держал Python 2.x и несколько версий Python 3.x, и всё со всем без проблем работало.
А теперь сделайте stadalone приложение Python c Qt. Это адский ад на всех платформах.
Покопался в пыльных архивах, нашёл собственное поделие 2008 года на Python + Wx, запакованное в standalone-приложение через py2exe, 19 мегабайт, запустил exe, работает. Ещё покопался, нашёл переделанную версию под Qt, датируемую 2013 годом, 37 мегабайт, запустил exe, работает. Никакого адского ада, никаких костылей, чтобы уложиться, скрипт для py2exe из восьми строчек, практически без изменений скопированный из их туториала. Писалось изначально для Windows XP, щас заработало в Windows 10, без правок где-либо и установок чего-либо.
Sap_ru
26.08.2023 16:39-1Вы раз в год ставите мажорные обновления Python?
На всяких убунтах не LTS они сами обновляются, что доставляет.
На Ubuntu нельзя держать параллельно несколько версий Python?
Очень достаточно сложно и геморно.
А теперь сделайте stadalone приложение Python c Qt. Это адский ад на всех платформах.
С тех пор всё стало сложнее и в некотором роде хуже.
Andrey_Solomatin
26.08.2023 16:39То правишь ":list[int]" на ":collections.List[int]"
Такое бывает когда не угадал персию и начал писать на самой новой и потом решил откатиться на старую. Кстати в промежутке там был еще typing.List.
Технологии для упаковки своего питона в приложения существуют. Да размер запускоемого файла растёт, но это не всегда проблема.
В одной оперсорсной игре внутри много Питона. В сборки под виндоус включён Питон. Для линуксов и мака используется системный. Сейчас минимальная поддерживаемая версия 3.8, но должно работать на всех современных. Внешних зависимостей и сетевых вызовов нет. Проблем тоже нет.
Так что дело не в самом Питоне, а в зависимостях. С ними начинается цирк с конями. Если вы не используете изоляцию, будет больно.Sap_ru
26.08.2023 16:39Такое бывает когда не угадал персию и начал писать на самой новой и потом решил откатиться на старую. Кстати в промежутке там был еще typing.List
А на какой нужно писать? На старой? Тогда на depricated нарвётесь.
Во-первых, попробуйте поставить 3.11 на старый Linux или 3.6 на новый. Очень-очень-очень увлекательно. Там вообще увлекательно вторую версию ставить.
А во-вторых, в какую-то теорию рассказываете.
А на самом деле 3.8 плохо совместим с 3.9, который плохо совместим с 3.10, который вообще ломает треть пакетов при переходе на 3.11.
Как я должен описывать типа списков, чтобы это работало с 3.6 по 3.11. Ну, пусть, даже с 3.8, которой менее четырёх лет. Муа-ха-ха. Или в 2023 я не должен пользоваться типизацией?
И ясен перец, что релизный Питон внутри себя отлично работает. Ну, кроме depricated фич, из-за которых всё равно исходники приходится править (причём, там же ещё и ворнинги начинают новые сыпаться, тоже сильно пугает пользователя). Но чистый питон без пакетов редко нужен. А с пакетами... Как уже говорил множество пакетов от 3.9 не подключается в 3.10, а из 3.10 в 3.11. включая всякие очень полулярные http request. С этим что делать? Только старую версию тягать. Что увлекательно под Linux, и чуть менее увлекательно под Windows. А каких-то случаях ещё и отлаживаться и собираться под несколькими версиями.Andrey_Solomatin
26.08.2023 16:39А на какой нужно писать? На старой? Тогда на depricated нарвётесь.
Я бы сказал всеми силами не писать под разные рантаймы. Например приносить свой со всеми зависимостями.
Во-первых, попробуйте поставить 3.11 на старый Linux или 3.6 на новый. Очень-очень-очень увлекательно. Там вообще увлекательно вторую версию ставить.
Второй уже умер. Да понимаю приходится иногда делать странные вещи. Но проблема ли это языка? Кстати проблемы со всякими openssl я и на джаве встречал.
А во-вторых, в какую-то теорию рассказываете.
Не дичь, а то что есть. Там нет сторонних зависимостей, только Питон. И сетевого взаимодействия нет.
Или в 2023 я не должен пользоваться типизацией?
3.6 закончился 2 года назад. Если вы всё еще с ним, в не в 2023.
А с пакетами...
С совместимостью пакетов есть проблемы. Но как только вы выходите из зоны современности и попадаете на устаревшие версии всё становится гораздо хуже.
В Питоне есть темные места, и кажется вы решили пройтись по всем ним. Если не секрет что у вас за проект такой, когда надо весь этот зоопарк поддерживать?Sap_ru
26.08.2023 16:39Мы говорим о платформах для разработки Desktop приложений. Вот я и перечисляю проблемы платформ. У Python - проблемы с совместимостью версий и standalo приложениями.
А вы, видимо, пытаетесь доказать,что Python круче всех. Ок, круче всех. Я его даже очень активно использую как основной язык сейчас. Но коммерческий desktop-софт на нём писать категорически ненужно. Как и любой другой долгоживущий без поддержки софт. Как только вы пытатесь продать такую программу как законченный продукт (а не как платформу или подписку), то отгребаете проблем. Физически это несомненно возможно, но банально экономически не выгодно. Я пробовал, а вы?
А про то, какой софт... Любой коммерческий desktop софт. Учёт, бухгалтерия, промышленная автоматизация, управление всяким разным. Заказчик хочет, купить софт и использовать его пока ОС жива. Довольно странно, когда созданная три года назад программа перестаёт запускаться на современной ОС. Я бы сказал, что срок жизни софта должен быть от 5 до 7 лет.
Более того, неизбежный лес "тёмных мест" начинаются как при любой попытки писать что-либо кроме web-сервисов. Но это не только у Python. У Java точно так же.
atshaman
26.08.2023 16:39Просто забыл написать. Python при всех своих плюсах имеет проблемы с развёртыванием приложения либо с долгосрочной поддержкой.
Ну в общем да - паковать hello, world! в какой pyinstaller\nuitka'у еще можно но что-нибудь большое уже больно.
Если не поломается само приложение, то поломаются зависимости. Более того, складывается ситуация, когда у вам нужно тянуть сразу несколько версий.
Общая же проблема. На ту же ноду с модулями (Тысячи их! И все такое ощущение, latest) посмотрите. На фоне сборки фронтенда python'опроблемы не смотрятся.
Например 3.10 поломала довольно много пакетов. Которые потом обновились, но что делать на Ubuntu на которой была только 3.10?
Тут да. По счастью у меня везде centos и местами даже 7 - так что пишу свои поделки на 3.7 (eol? Не, не слышал!) и в общем-то особых проблем не имею.
С TCL ситуация чуть-чуть лучше только потому, что зависимостей меньше и оно быстрее начинает работать с новой актуальной версией Python.
Предполагаю, что в случае с программой-напоминалкой будет вообще "хорошо" - в смысле, фигли там править-то? Все из стандартной библиотеки практически.
Отличие от Java в том, что Java нет проблем тащить с собой нужную версию JVM на всех поддерживаемых платформах.
Ну это не то, чтобы совсем так - даже если забыть про проблемы вида пресловутого log4journal. Т.е. если забить на maintenance и довольствоваться тем, что "запустилось" - то да, а нормально сопровождать с обновлением между версиями jvm те же яйца, вид в профиль.
Прямо бинарники без всяких приседаний.
См. выше про pyinstaller с вариантами. При желании на размер бинарника плевать и на поддержку забить - можно достаточно долго таскать за собой.
Просто сделайте stadalone приложение Python c Qt и все станет ясно. Это адский ад на всех платформах.
Так по ощущениям в поддержке Qt без всякого "py" то еще адище.
Sap_ru
26.08.2023 16:39Ну это не то, чтобы совсем так - даже если забыть про проблемы вида пресловутого log4journal. Т.е. если забить на maintenance и довольствоваться тем, что "запустилось" - то да, а нормально сопровождать с обновлением между версиями jvm те же яйца, вид в профиль.
А тут мы снова скатываемся в Web. Мы же про десктоп говорим? Как поддержка, если вы купили приложение, используете его и оно выполняет свою функцию? И проблемы log4journal практически если у вас не Web сервис.
atshaman
26.08.2023 16:39Ну вот говорю - что если есть желание "вынести проблемы поддержки приложения за скобки" - то в случае с python'ом это можно обеспечить примерно таким же образом, как с java'ой.
Все, что требует для своей работы развитого runtime'а - будет сталкиваться с проблемами совместимости (мажорных) версий этого runtime'а в течении жизненного цикла продукта.
mikko_kukkanen
Я не самый большой специалист по python, но мне кажется, вмеcто этого лучше добавить в код файл requirements.txt
slonopotamus
requirements.txt
устарел уже лет на десять. И появившийся вслед за нимsetup.py
тоже. Современный подход -pyproject.toml
.mikko_kukkanen
Старый конь борозды не испортит.