Pull to refresh

Comments 112

Programming Language: Python Required dependencies: customtkinter, time, datatime, os and typing

Я не самый большой специалист по python, но мне кажется, вмеcто этого лучше добавить в код файл requirements.txt

requirements.txt устарел уже лет на десять. И появившийся вслед за ним setup.py тоже. Современный подход - pyproject.toml.

Но тут я увидел то, что впоследствии переведет меня из Notepad++ (да, да, именно там я и писал свой проект до этого момента). 

Ощущение, как будто фраза оборвана на половине. Переведёт куда? Также:

Раработка

Упс, хотел сказать что в итоге перешёл в PyCharm разумеется. Исправил.

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

Для прототипирования может и ок, но нормальное ПО на этом мусоре писать - дурной тон.

Ну или придётся делать так, как делает большая часть более-менее сложного софта на питоне - таскать за собой всё. Или банально - в виде бинарного дистрибутива или кокетливо, используя virtualenv, conda или ещё 10000 подобных им инструментов для решения проблемы, которой не должно было существовать.

У меня несколько написанных для себя программ на Питоне живут ещё с Windows XP и версии Питона, кажется, 2.4. Пережили переход на Висту, 7 и 10, и на большинство последующих актуальных версий Питона (переход на Python 3 потребовал некоторых правок). ЧЯДНТ? Между тем, многий софт, обычный, сишный, где Питона никакого нет даже в следовых количествах, внезапно, "начиная с такой-то версии мы не поддерживаем Windows 7". Мусор — он не в Питоне, он в головах.

Дело не в "живут ещё с", а в том, как написать программу на Питон 3.11, а потом выяснить, что версия под Win7 ещё нужна.

Перевести на Питон 3.8 сильно сложнее, чем из программы на C++ выкинуть все API, добавленные после Windows 7? Или почему там они перестают старую винду поддерживать.

Да, сильно. WinAPI не часто бывает размазан по всей программе, да ещё чтобы везде новый. Питон 3.8 - 3.11 это во многом новые синтаксические плюшки. Для отката назад может потребоваться переписать почти каждую строчку всей программы. Да и приятного мало возвращаться назад в упоротый синтаксис тех type hint-ов.
Поэтому вместо этого костылят как запустить новый Питон на семёрке, и всё это глючит.

У меня десктопный софт, написанный на Delphi 5 (это 1997 или 1998 год) работал в Win2k, XP, 2008 server, 7, сейчас работает в 10, а в 11, надеюсь, не скоро придётся проверять, но уверен, что справится. Менять мне в нем не пришлось ничего. А вот чужой десктопный питонный софт на 7-ке уже не запускается принципиально. Так что там насчёт "многого софта"?

Ну это любой софт в какой-то момент может по желанию разработчиков перестать поддерживать определенную версию Windows.

Программа написанная для диплома в 2013-м году, ещё под XP во втором python (выводила данные от разработанной железки), работает на новом Debian'е, всё что потребовалось поменять import Tkinter as tk на import tkinter as tk

Какая же жиза жизовая

У этого говнопитона на сейчас есть три (!!!) версии в третей версии, которые между собой не дружат.

Ладно бы новый функционал, но нет сломали обратную совместимость.

И это все 3 версия. Делали бы уже нормально, не поддерживаемое говно назвали бы 4 питоном.

А недавно столкнулся под KDE с тем, что одно приложение использует 3.2, а другое 3.8. Прописать на запуск не помогает потому как там внутрм вызовы "python3". И для того что бы работало одно приложение надо менять глобально версию по умолчанию. Такой сюр.

Ну совместимость там в одну сторону. Не всё со всем.

Помотрите на https://docs.python.org/3/library/venv.html, просто запускаете каждое преложение в своём виртуальном окружении.

Между 3.2 (который уже более 6 лет не поддерживается) и 3.8 большая разница по версиям зависимостей, минимальня версия часто ползёт вместе с поддержкой версиии языка. Я бы сделал ставку что ваша несоместимость где-то здесь. Пользуйтесь виртуальным окружением.

Если я правильно понимаю планы тех, кто ведёт разработку языка Python и интерпретатора CPython, то они не собираются выпускать новые версии языка, ломающие обратную совместимость.

А какие технологии вы считаете не "мусором" (очень оценочное суждение, но ладно) для написания нормального ПО?

Заранее благодарю за ответ.

Не могу сказать, что имею прям стройное представление о каком-то эталоне...

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

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

Возможно у раста дела получше, не знаком с вопросом.

Глупость какая. Каким это питоном какая версия Windows перестала поддерживаться? Десятки тысяч компаний "нормальное ПО на этом мусоре" пишут и у все нормально работает

Каким это питоном какая версия Windows перестала поддерживаться

Вот этим:
...
Note that Python 3.... cannot be used on Windows 7 or earlier.
...
Note that Python 3.... cannot be used on Windows XP or earlier.
...

Как будто windows 7 и windows XP поддерживаются сами по себе

Для этого придумали .venv + есть docker, который убирает даже намек на расхождение версий.

Чек Insomnia, эта прога написана на "мусоре", но являются приятной глазу и в скорости не уступает Postman.

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

делать выпадающий список с двумя элементам для настольного компа...

Нет, он базируется на стандартном tkinter.

А вот и нет.

Installing collected packages: typing-extensions, darkdetect, Customtkinter

То есть ещё два пакета подтягивает.

Я это не из вредности спрашиваю. На работе установить всё через pip можно только скачав все пакеты в *.tar.gz, все лишние соединения запрещены политикой безопасности. Я считаю - правильно. Но иногда очень мешает.

  1. Кнопки обычно располагают рядом, а тут они сильно разнесены.

  2. Цифры можно вводить клавиатурой?

  3. Что такое значок полумесяца?

  4. Установка времени мышкой - самая удобная в некоторых прогах на Андроиде. Там круг часов и минут, делается все очень быстро

  5. Не понял, зачем постоянно видет, сколько осталось до выключения. Я бы лучше показал окно только за 1 мин или 30 сек до выключения.

  6. Автовыключение по завершению фильма на неком сайте можно сделать двумя путями: (а) написать плагин/эддон для браузера и выклюяать комп оттуда (или передавать некий сигнал внешней проге по собственно выключению), и (б) стартовать браузер из специальной проги типа chrome driver, которая автоматизирует работу с браузером и позволяет искать всякие элементы на страничке и взаимодействовать с ними.

  7. Есть правда ещё один способ - когда запустил прогу, замерять уровень загрузки cpu/gpu и следить за ним. Как только он резко упадёт, то значит, что фильма кончилась

  8. Можно ещё добавить кпопки snoose с разными вариантами - 5,10,15,30 мин - и показывать их только за секунд 15-30 до выключения.

Спасибо за советы, учту при дальнейшей разработке.

1.Про кнопки: мне показалось, что расположить их так будет более логично чем ставить их напротив друг друга + для позиционирования используется метод grid и фактически при позиционировании кнопки отмены под кнопкой старт/паузы всё уедет вниз ведь вся строка станет больше (в случае позиционирования в ячейку 0,2) либо в случае расположения кнопки в ячейку 1,2 уедет сам timebox_seconds. Но я согласен, логичнее разместить их поближе :).

2. Нет, цифры нельзя вводить с клавиатуры, элемент entry через который и реализован вывод полостью залочен для того чтобы при нажатии мышкой не отображался текстовый курсор (портит UI основательно) + вывод с клавиатуры отключен. Я просто решил не изобретать ещё один велосипед для валидации вводимых данных. Без блокировки элемент принимает также буквы, что совсем грустно.

3. Выбор тем, темная и светлая.

4. Абсолютно верно, но как реализовать сам круг силами самого customtkinter я не придумал.

5. Через win10toast выводятся оповещения при достижении часа, получаса, 10 минут и одной минуты до конца таймера. Мне хотелось знать точно через сколько будет выключение + просто хотелось реализовать вывод. В целом эта програмка скорее создана для изучения чего-то для меня нового и не претендует ни на что большее.

6/7. Большое спасибо! Я попробую реализовать это.

8. Весьма интересная идея

В общем, питон не самый удачный язык для GUI- программ )

Мосье знает толк в извращениях. Возьмите PyQT или wxPython и не мучайтесь. Нормальный виндовый гуй, выглядящий как нормальный виндовый гуй.

Мосье знает толк в извращениях. Возьмите нормальный компилируемый язык и не мучайтесь. Тот же C++ с Qt, C# с WPF (или Avalonia) или Delphi с FMX. Нормальный виндовый гуй, выглядящий как нормальный виндовый гуй.

Ой-вей, мосье таки пробовали использовать это Qt c С++? Я только от чтения инструкций, как это всё собрать, о**ел и передумал. Дело было несколько лет назад, возможно, с тех пор лучше стало, возможно, нет, но для PyQT уже тогда работал банальный pip install. wxWidgets, правда, недавно заводил под Visual Studio — вот он приятно удивил, буквально один конфигурационный файл добавляешь в настройки проекта, и уже всё работает, даже зависимости прописывать не нужно. C# и WPF не люблю, Delphi не знаю и учить как-то не вижу смысла — если уж даже в период расцвета его популярности не выучил, то щас ради чего? Время от времени пишу гуй, на мой взгляд, Питон для него замечательно подходит, а для мелких поделок "для себя", наподобие описанной в статье, так и вовсе не представляю, чем бы он был плох.

"YMMV": у меня PyQT под Линуксом не заработал даже для hello-world.
(А QT для С++ нормально.)

А, что конкретно пошло не так? Просто я тоже столкнулся с подобной проблемой

А зачем собирать, если можно ставить в собранном виде? В общем-то, что на Python, что на C++ использовать Qt проблем нет. Родной установщик Qt (Maintenance Tool) для C++ существует уже больше десяти лет.

Да я соберу, если прям надо будет, и, более того, как-то по работе даже собирал, но то по работе, а чтобы для себя таймер написать — как-то оно, мне кажется, того бы не стоило. Помню, что оно долго грузило всякими разными версиями и лицензиями и пр., и пр., а готовых бинарных сборок я тогда найти не осилил — если щас есть, ну ок, рад за них. Отметим, конечно, что и для Python можно вполне поиметь проблем с пакетами, которые туго собираются из исходников и только из исходников (Qt к ним, правда, не относится), и где вся надежда либо на безупречную прямоту собственных рук, либо на широко известный в узких кругах сайт Кристофа Голке, который уже больше года не обновлялся.

пробовали использовать это Qt c С++?

Честно? Почти нет. А когда пробовал - вообще не понравилось. Но его используют многие и типа хвалят. А я, т.к. в основном работаю на Делфи, попробовал так сказать что-то такое, после чего всё остальное меня не устраивает. Там создание сложнейшего GUI невероятно удобно, просто и почти без кода. Да, сам язык только начинает догонять не прекращавшие развиваться языки, но догоняет, а местами и так было лучше.
Но вы просто не пробовали действительно удобные инструменты для создания GUI. Кстати. Delphi имеет интеграцию с Питоном. Причем в обе стороны. Можно внутри Делфи использовать интерпретатор питона, а можно в Питоне подключить созданный в Делфи GUI. https://blogs.embarcadero.com/introduction-to-python-gui-development-with-delphi-for-python-vcl-fmx/

Т.е. качаешь бесплатную версию среды. Накидываешь фору (или формы). Для этого вообще код писать не надо. Выбираешь стиль или набор стилей или создаёшь вообще свой уникальный. И как в PyQt подключаешь всё это и используешь в Питоне.

Если вы про редактор формочек, то и помимо Делфи всякого добра полно — я недавно какой-то wxBuilder использовал, накидываешь элементы, расставляешь стили, да, вообще код писать не надо, только для обработчиков событий. Хотя на Питоне мне чо-то нравится прямо весь гуй в коде создавать, C++ для такого слишком неуклюж, а на Питоне нормально.

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

Пример элемента списка
Это не на телефоне, это тест в Десктоп
Это не на телефоне, это тест в Десктоп

Вы вот это имеете ввиду?
https://ru.wikipedia.org/wiki/WxFormBuilder
С новыми/другими системами есть проблема - неизвестно заранее, есть ли там что нужно и работает ли оно так как хочется. А Дельфи и С++ Билдер всё же развитые системы, там что угодно кажется есть.
Расскажите, какие плюсы у wxBuilder по сравнению с Дельфи?

Я, извините, не могу рассказать, какие плюсы или минусы есть у чего-либо по сравнению с Дельфи, по причине полного незнания Дельфи. Трудно, очень трудно было избежать Дельфи, пытаясь быть программистом в российской провинции начала 2000-х, но вот мне как-то удалось.


Да и вообще было бы странно сравнивать редактор формочек WxFormBuilder со средой разработки Delphi, включающей в себя IDE и собственный компилятор для собственной версии Паскаля. Возможно, Delphi хороша — некоторые знакомые программисты в российской провинции начала 2000-х очень хвалили — но я ж просто даже упоминание Delphi встречаю впервые лет за десять. А когда на работе последний раз понадобилось делать гуй, уговорить начальство делать его на wxWidgets у меня кое-как получилось (эти интеллектуальные содомиты изначально планировали делать его на Unity), а на Delphi бы точно не смог...

Писал несколько лет на C++ QT. Сейчас уже несколько лет использую wxWidgets с питоном. От последнего впечатления намного более приятные

Без шуток, я практически так и сделал в первой версии на чистом tkinter, но отменить выполнение команды shutdown как оказалось нельзя, как и поставить её на паузу. Поэтому я перенёс все вычисления на сторону приложения XD

UFO just landed and posted this here

Зачем вообще нынче десктоп приложение?

Написано из десктоп либо мобильного приложения.

Чтобы потом переписать на веб-морду и микросервисы?

Маньячество с микросервисами до добра не доведёт

UFO just landed and posted this here

Написано из браузера, который де-факто стал OS системы представления.

Который все ещё по факту - десктоп приложение.

Помимо этого, вся ОС (при чем совершенно любая) - это набор приложений, а не веб сервисов или веб-приложений.

Никто в здравом уме не пользуется браузером для чата в мессенджерах. Или вы для TG, WU, дискорд или Скайпа используете браузер? Нет. А Дискорд и Скайп вообще за вас его используют и как работают, норм?

Ну и давайте сделайте таймер отключения компа через веб сервис. Без нужды в отдельном "десктоп приложении" в виде веб-сервера.

UFO just landed and posted this here

Внезапно, на десктопе это такие же веб-приложения, обёрнутые в какую-то хрень на базе Хрома. Электрон кажется называется.

Я об этом сразу написал. Только это скорее проблема, а не преимущество

А Дискорд и Скайп вообще за вас его используют и как работают, норм?

Но стартовать новые проекты - нахрена?

Нахрена? А нахрена использовать абстрактную прослойку в виде API браузера, когда софт может куда быстрее, эффективнее и удобнее работать без прослойки? Да, создавать софт сложнее, чем веб-сайтики. Кто ж спорит. С таким же успехом можете использовать Java, которая по сути ничем не отличается от абстракции браузера со своим API, однако дает куда больше возможностей чем браузер. Равно как и с браузером достаточно написать один раз виртуальную машину под платформу и использовать один и тот же код для работы на всех платформах. Однако, софт под десктоп в большинстве своем пишется всё равно на нативно компилируемых языках. А почему - и так понятно. Скорость работы, уникальные для ОС возможности, отсутствие зависимости от какого-то там браузера и т.д.

UFO just landed and posted this here

Кликнул два раз на ярлык и работаешь?

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

UFO just landed and posted this here

Ну видимо вы только в 90х и использовали нативный софт. Давно вы телеграм обновляли? А как сложно было скачать? Сколько часов в день тратите на установку телеграмма каждый раз?

А ещё представьте, как было бы здорово имеет такую программу, которая бы позволяла найти программу, установить в один клик и чтоб потом само обновлялось. А хотя подождите-ка, уже 8 лет как в Винде есть Microsoft Store, который все это давно умеет и делает.

И Steam с играми также поступает. Вот это прогресс.

А от современных сайтов и сервисов с тоной говно-рекламы уже блевать хочется.

Они не удобные, кривые, медленные, лагающие. Жрущие ОЗУ как не в себя. 7 вкладок и минус 6гб ОЗУ. Великолепно.

При этом все вирусы и все говно - это как раз из веб источников. С веб сайтов. Весь скам, ложные ссылки на сервисы, поддельные страницы. Спасибо веб сайтам и "безопасным" браузерам. А сколько было бы не будь адблока? Просто ужас.

UFO just landed and posted this here

Покажите софт делфи, который весит много и "неповоротливые говно". Хоть из 90х, хоть сейчас. Делфи всегда создавал быстрый софт с нативным интерфейсом. А сейчас и вовсе дальше ушел. А вот неповоротливых и кривых сервисов и сайтов я тебе десятки назову.

UFO just landed and posted this here

На Делфи самый первый фреймворк VCL является нативным и использует нативные контролы для разработки. Он позволял их кастомизировать в рамках возможностей ОС. Он всё это и даже больше позволяет это и сейчас. Софт на Делфи до 2010 года написанный штатными средствами является полностью нативным как с точки зрения кода, так и с точи зрения GUI. Только после 2011 года в штатной поставке появился кроссплатформенный фреймворк, который уже не использует почти нативные контролы, но при этом софт всё равно нативный для целевой платформы.

Единственная проблема, которая могла быть у новичков в Делфи, это то что мало кто умел и делал асинхронный, многопоточный код. И софт просто мог подвисать, однако скорость работы от этого не страдала. Страдал немного пользователь.

В веб же, тормоза являются следствием нагромождения слабо контролируемого кода из сотен зависимостей. Десятки запросов в разные части света для загрузки страницы. Проблемы с утечками (в JS!), отвалом скриптов со временем и т.д. Да, всё это из-за не компетентности, однако, речь ведь идет не о поделках отдельного разраба, а о крупных проектах. Ютуб, дискорд, скайп, ВК, да даже хабр местами косячит (фризит, тупит, ломается логика, даже как-то пагинация сломалась и роут возвращал на любой индекс страницы одну и ту же страницу). А другие сервисы, которыми я пользовался разово я даже не вспомню, но почти везде меня не устраивала их работа. То прыгающая страница, то не адекватная работа. Всё это не доставляет удовольствия.

Веб-сервис не стабилен и не надежен. Хоть в браузере, хоть в виде вебвью приложения.

UFO just landed and posted this here
Надо признать что время десктопных приложений безвозвратно ушло.

А мне казалось, читать Грэма давно стало немодно...

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

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

UFO just landed and posted this here

Таймер, который отключает компьютер. Для веба. Я даже не удивлюсь, если в нашем дивном новом мире это уже возможно технически, но, троллейбусизхлеба.jpg, зачем??

Автор захотел себе определенную софтину и сделал ее сам - и это прекрасно. DIY в мире программирования.

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

Да, промахнулся, спасибо.

Надо было, но эта идея пришла уже в процессе реальной работы приложухи у меня по вечерам

Как минимум это куда интереснее, чем пресловутый To-Do List в качестве пет проекта.

Автор - молодец, всячески поддерживаю. Сам сделал софтину для себя, сам пользуешься - это прекрасно.

Чего только люди не придумают и не изучат, лишь бы с qt не разбираться.

Кому интересно закрыть тему раз и навсегда:

QtDesigner + pyside6 + chatGPT (в дополнение к ущербной документации qt) = красивое приложение любой сложности.

В топку этот кривой QT.

Есть Windows API.

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

Так, ребята. Вы тут говорите о браузерах? В 2011 году я делал через HTA / VBScript программу. Обычная html страница с кнопками выключить или перезагрузить компьютер, извлечь дисковод и так далее. Вполне себе считается, да? И через WinRar SFX ещё сделал в добавок. Чем себе не программа?
И да. У меня Windows 11. Удивительно, но она запустилась и работает. Да!
Комментарий WinRar SFX

Path=%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>

Рекомендую взглянуть на flet

Скрестили питона с flutter и его библиотекой виджетов

Из плюсов - кросплатформенность (desktop, mobile, web*), упаковка в один исполняемый бинарь

Из минусов - не очень большое комьюнити

Двадцать лет назад передо мной стояла задача: выбрать несложный инструмент для создания утилит для обработки текста, управления процессами и т.д. Связываться с монстрами типа Delphi не было ни времени, ни желания, хотя небольшой опыт на Паскале был. После недолгих поисков остановился на AutoIt, за 15 лет немало всего на нём написал, включая графические интерфейсы, работу с сетью и базами данных. Скрипт всегда компилировался в файл размером килобайт в 300 (это в 3 версии, во 2 было ещё раза в 3 меньше). И эти файлы, созданные в XP, сейчас легко запускаются на десятке! Про Пайтон слышал, но от перехода на него останавливало наличие двух версий и сложность компиляции.

Перешел всё-таки 6 лет назад, т.к. на нём есть отличные библиотеки для создания ботов, работы с MQTT и подобных вещей. Но иногда бывают ситуации, когда на AutoIt написать тупо проще. Например, программа должна работать с буфером обмена, хранить настройки в файле и прятаться в трей - там всё это есть "из коробки" и делается парой строк.

Но да, дизайнер из меня ещё тот - с красивостью интерфейса никогда особо не парился, главное функциональность.

Моя первая программа, которой пользовался кто-то кроме меня, была именно на AutoIt.

У него узкая специализация, но в ней он очень хорош.

Решая аналогичную проблему, всегда пользовался простым советским решением:
Win + R, а затем shutdown -s -t %sec%

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

Поразительно сколько отличных линуксовых программ не пользуются популярностью из-за нежелания их разработчиков написать нормальный гуй или хотя бы документацию по использованию. Именно это и удерживает большинство пользователей пк от перехода на линукс. Хотя есть софт в котором гуй на уровне мака и по сравнению с виндой как будто заменил жигули на космолет.
Возможно стоит попробовать ChatGpt для написания гуя под готовый софт. Не было такого опыта?

Зашел сюда в надежде получить ответ. Хочу запилить приложение-напоминалку под Убунту. Почитал здешние комменты, на чем писать то? :)

Lazarus (Pascal) - кросс-платформено и умеет собирать бинарник.
C#+WinForms - Куча мелких багов, но работает.
Pyhton + Tcl - Уродское до зубной боли, но что-то несложное сделать можно. Через год потребует правок под новую версию Питона.
Pyhton + Qt - Есть проблемы с тасканием зависимостей после выхода новой версии
Python + Wx - Всё те же проблемы с зависимостями.
Java + SWT - При знании и умении отлично работает. Но нужно много знать и уметь. Требуется тягать Java.
Java + JavaFx - При знании и умении отлично работает. Нужно очень много знать и уметь ещё больше. Требуется тягать Java.
C++ + Qt - Вещь, но требует скилов. Зато можно даже статический бинарник собрать при желании.

Мнда. Как бы это сказать - написать "напоминалку" на python'е + TCL так, чтоб под новую версию переписывать пришлось - это прям упороться надо.

Угу, и тут в Питоне очередной depricated выкатывают и приплыли. В лучшем случае куча ворнингов. В худшем - работать перестанет. Depricated сейчас удаляют через версию. То есть через версию Питона можно приплыть с заметной вероятностью.

Ну вот смотрите - вы пишете про python+tcl "потребует правок под новую версию" - про python qt\wx - не пишете. Т.е. предполагаете, что проблемы вызывает именно TCL часть. Внимание, вопрос - какие?

Далее, исходный вопрос идет о "простом GUI-приложении" - я понимаю, развесистая вебня со списком зависимостей в мою руку длиной - или фризить версии, или что-нибудь да поломается уже на средней дистанции (А где у нас не так, по большому счету?) - но мелкая гуйня-то обо что? Из того, что я себе обозначил - разве что crypt много чего за собой потянет, но тут вроде как не нужен. Что и куда по вашему мнению "приплыть" должно?

И, кстати, почему оно не должно приплыть через месяцок если выбрать за основу какую-нибудь java8\11 или там qt5 в ubuntu?

Просто забыл написать. 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 и все станет ясно. Это адский ад на всех платформах.

ломается раз в год сейчас

Вы раз в год ставите мажорные обновления 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, без правок где-либо и установок чего-либо.

Вы раз в год ставите мажорные обновления Python?
На всяких убунтах не LTS они сами обновляются, что доставляет.

На Ubuntu нельзя держать параллельно несколько версий Python? 
Очень достаточно сложно и геморно.

А теперь сделайте stadalone приложение Python c Qt. Это адский ад на всех платформах.
С тех пор всё стало сложнее и в некотором роде хуже.

То правишь ":list[int]" на ":collections.List[int]"


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

Технологии для упаковки своего питона в приложения существуют. Да размер запускоемого файла растёт, но это не всегда проблема.

В одной оперсорсной игре внутри много Питона. В сборки под виндоус включён Питон. Для линуксов и мака используется системный. Сейчас минимальная поддерживаемая версия 3.8, но должно работать на всех современных. Внешних зависимостей и сетевых вызовов нет. Проблем тоже нет.

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






Такое бывает когда не угадал персию и начал писать на самой новой и потом решил откатиться на старую. Кстати в промежутке там был еще 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. А каких-то случаях ещё и отлаживаться и собираться под несколькими версиями.

А на какой нужно писать? На старой? Тогда на depricated нарвётесь.

Я бы сказал всеми силами не писать под разные рантаймы. Например приносить свой со всеми зависимостями.

Во-первых, попробуйте поставить 3.11 на старый Linux или 3.6 на новый. Очень-очень-очень увлекательно. Там вообще увлекательно вторую версию ставить.

Второй уже умер. Да понимаю приходится иногда делать странные вещи. Но проблема ли это языка? Кстати проблемы со всякими openssl я и на джаве встречал.

А во-вторых, в какую-то теорию рассказываете.

Не дичь, а то что есть. Там нет сторонних зависимостей, только Питон. И сетевого взаимодействия нет.

Или в 2023 я не должен пользоваться типизацией?

3.6 закончился 2 года назад. Если вы всё еще с ним, в не в 2023.

А с пакетами...

С совместимостью пакетов есть проблемы. Но как только вы выходите из зоны современности и попадаете на устаревшие версии всё становится гораздо хуже.

В Питоне есть темные места, и кажется вы решили пройтись по всем ним. Если не секрет что у вас за проект такой, когда надо весь этот зоопарк поддерживать?

Мы говорим о платформах для разработки Desktop приложений. Вот я и перечисляю проблемы платформ. У Python - проблемы с совместимостью версий и standalo приложениями.
А вы, видимо, пытаетесь доказать,что Python круче всех. Ок, круче всех. Я его даже очень активно использую как основной язык сейчас. Но коммерческий desktop-софт на нём писать категорически ненужно. Как и любой другой долгоживущий без поддержки софт. Как только вы пытатесь продать такую программу как законченный продукт (а не как платформу или подписку), то отгребаете проблем. Физически это несомненно возможно, но банально экономически не выгодно. Я пробовал, а вы?

А про то, какой софт... Любой коммерческий desktop софт. Учёт, бухгалтерия, промышленная автоматизация, управление всяким разным. Заказчик хочет, купить софт и использовать его пока ОС жива. Довольно странно, когда созданная три года назад программа перестаёт запускаться на современной ОС. Я бы сказал, что срок жизни софта должен быть от 5 до 7 лет.
Более того, неизбежный лес "тёмных мест" начинаются как при любой попытки писать что-либо кроме web-сервисов. Но это не только у Python. У Java точно так же.

Я пробовал, а вы?

Как вы распространяете этот софт? Ввиде питоновского файла или всё таки пакуете всё с интерпретатором и зависимостям?

У Python - проблемы с совместимостью версий

У Python или у сторонних библиотек? Всё таки немного разные вещи. С проблемами библиотек сталкивался неоднократно, а вот сам Питон со стандартной билиотекой больших проблем мне не доставлял.

Софт распространяется в виде инсталятора, который распаковывает бинарник и все зависимости.
Я уже привёл самый известный пример - как описывать тип списка: list[int] или collections.List[int] или typing.List[int]?
Но с самим языком всё более-менее неплохо. Ломающие обратную совместимость изменения достаточно редко выходят и, как правило, исправления можно относительно легко внести. Но с библиотеками беда бедная. Там чуть ли не каждую версию всё ломают сейчас. Вот, прямо сейчас в 3.11 очень много поломано из-за того, что изменили пути C-заголовков и некоторые макросы.
Казалось бы, причём тут библиотеки? А на фига мне "голый" питон? На нём, как ни странно, без библиотек много не напишешь. Тем более под десктоп.

Софт распространяется в виде инсталятора, который распаковывает бинарник и все зависимости.


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

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

Правда вы упоминали про установку питона под линуксы, значит на самом деле всё сложнее.

что изменили пути C-заголовков и некоторые макросы.

Я пока не дошёл до 3.11й, все вокург меня на 3.9ке сидят. Но если использовать бинарники и зафиксированные версии, то это вас не должно беспокоить так сильно.

Если в организации много проектов порой бывает удобно использовать одну версию для всех проектов. Обычно она не самая новая, да и обновление всего это болезненно. Сейчас на работе уже почти убили 3.6 и работаем на 3.9.

Когда нет централизованных стандартов, то может получиться бардак. Например видел AWS lambda на Питоне 2.7, которая была написанна в 2021 году (первый коммит в репозиории). При таком подходе вопрос как ставить типы не стоит, так как поддерживается в текущей версии.

Казалось бы, причём тут библиотеки?

Я за точность формулировок. Если проблема в библиотеках, давайте так и говорить, а не обобщать на всё.

Софт распространяется в виде инсталятора, который распаковывает бинарник и все зависимости.

Особенно весело, когда даже инсталятор не может запуститься из за не совместимости с windows.

Просто забыл написать. 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" то еще адище.

Ну это не то, чтобы совсем так - даже если забыть про проблемы вида пресловутого log4journal. Т.е. если забить на maintenance и довольствоваться тем, что "запустилось" - то да, а нормально сопровождать с обновлением между версиями jvm те же яйца, вид в профиль.

А тут мы снова скатываемся в Web. Мы же про десктоп говорим? Как поддержка, если вы купили приложение, используете его и оно выполняет свою функцию? И проблемы log4journal практически если у вас не Web сервис.

Ну вот говорю - что если есть желание "вынести проблемы поддержки приложения за скобки" - то в случае с python'ом это можно обеспечить примерно таким же образом, как с java'ой.

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

И снова нет. Из практики знаю, что с Java намного проще.
Самый простой вопрос с которого начинается любой Desktop - где взять портабельную сборку Pyhton нужной версии под Linux? А под Windows?

Use pyinstaller, Luke! Он позволяет забандлить интерпретатор-зависимости-приложения в один elf\pe executable с распаковкой\выполнением этого зоопарка "налету".

Тоже писал кроссплатформенное (Windows, Linux) GUI-приложение с использованием tkinter. Хотелось попробовать сделать на любимом Python то, что обычно делал на C++/Qt. Да, здесь нет удобного Qt Designer для макетирования форм — все приходится ручками прописывать. Но результатом остался доволен. Для приданию приложению более современного вида остановился на достаточно удобной библиотеке ttkbootstrap. Хотя рассматривал и пробовал разные варианты, включая упомянутый CustomTkinter.

Для себя сделал вывод: писать на Python GUI-приложения можно и нужно. В моем случае это было приложение, работающее с устройством на микроконтроллере через UART по MODBUS-подобному протоколу. Использовались вкладки, кнопки, спинбоксы, поля ввода, элемент Text, чекбоксы, стилизованные под switch, диалоговые окна.

Жоско. На pywin32 один только тулбар чтобы создать надо провернуть кулак в заднице. Слайдер просто нереал.

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

Sign up to leave a comment.

Articles