"Костыли и велосипеды программируем как умеем".
История появление «гениальной» идей
Гуляя по обширным мусорным завалам на моём рабочем столе, я понял что ему чего-то не хватает. Так и пришла "гениальная" мысль украсить задний фон рабочего стола хоть каким либо образом. И конечно же я решил использовать питон - легко, сердито.
Используемые библиотеки
Pillow - генерировать саму картинку на обои.
Ctypes - понадобится чтобы получать разрешение экрана, позиции и действий мыши.
Win32gui - отслеживание текущего окна.
Для начала хотелось просто сделать вывод дня недели и времени на центр экрана. Так я и поступил, но этого стало мало и я решил выводить нагрузку на ЦП и ОЗУ. Но приходилось часто обновлять рабочий стол (каждую секунду), а это оказалось не лучшая идея из-за нагрузки на ЦП, да и с моим то i3.
По итогу пришлось вернуться назад к ежеминутному обновлению. Но при этом я решил добавить курсы валют и погоду. И получилось что-то вроде этого.
Погода парсится напрямую с сайта https://www.gismeteo.ru/ немного хитро и лениво, но всё же - не плохо. Курс валют - https://www.cbr-xml-daily.ru
Но и этого мне стало мало, разобравшись как отслеживать положение и статус мыши я решил сделать "функционирующие" обои, которые будут реагировать на нажатия. Звучит глупо и странно, но почему бы и нет.
Добавив во время ожидания проверки на нажатие мыши и нажатие по определённым частям экрана (Кнопкам), мне удалось сделать это:
При нажатии на название города, в этом же месте появляется это:
И здесь нажатием на нужный город можно выбрать его и погода будет отображаться именно с этого города.
Как позже выяснилось я не учёл того момента, что реакция на нажатия будет происходить всегда, при любом открытом окне.
Порыв интернет пол часика - нашёл библиотеку win32gui позволяющую получить сфокусированное приложение, тем самым теперь мы реагируем только когда фокусировка на рабочем столе.
А почему бы не сделать кнопку "сменить тему"?
Через некоторое время имеем кнопку сменить тему в нижнем правом углу.
Свои темы добавить достаточно легко и просто.
Так же на скорую руку добавил автоматическое сохранение настроек и конфигураций которые вы можете редактировать сами (добавив свои курсы / города для погоды), открыв файл "\resources\cache\settings.json" как текст.
Можно изменить как и города с погодой, так и валюты. Функционал маленький, но реализовать можно огромное количество идей, нужна лишь фантазия.
Для автозагрузки вместе с виндовс достаточно засунуть один .bat файл в автозагрузку.
Заходим в автозагрузку: Win + R -> "shell:startup".
Создаём .bat файл в папке "Автозагрузка" и прописываем туда.
Версия питона может отличаться. pythonw.exe - запускает питон файлы без консоли (в фоне) Пример батника будет в исходнике.
Исходник
Комментарии (29)
Maksim-Burtsev
20.03.2022 16:10+2Вы либо брокер, либо у вас железные нервы, иначе не понимаю зачем постоянно мониторить курсы валют.
А так интересно:)
SShtole
20.03.2022 16:35+2Я б не стал выбирать гарнитуру, вывод которой курса доллара выглядит как 703.95. Опасно для сердечной мышцы.
Kellis
20.03.2022 19:18+3Как альтернатива можно сделать свою обоину в Wallpaper Engine - они точно собаку съели на живых обоях.
leonP4
20.03.2022 20:29+2Как ранее в комментариях подметили, есть уже множество готового софта для данной задачи, но Ваш вариант интересен с точки зрения реализации и подхода, почему бы не уделить этому больше внимания?
П. С. В вашем репозитории bat файл имеет полный путь с именем вашей учетки, будьте осторожны с публичными данными.
hzs
21.03.2022 08:12+2И вот, спустя каких-то 20 лет, мы можем вспомнить что был когда-то Active Desktop, который превращал в винде рабочий стол в веб страницу. Если мне не изменяет память, уже тогда существовал DHTML и уже в начале двухтысячных можно было создавать динамические страницы
HemulGM
21.03.2022 09:00Это ужасная идея - Менять изображение каждые несколько секунд на рабочем столе. Живые обои делаются не так. Ваш вариант "живых обоев" обеспечит максимум 1 кадр в 2-3 секунды, в то время как реальные живые обои позволяют отображать более 60 кадров в секунду, чтоб обеспечить реальную и плавную анимацию.
И делается это достаточно просто (не на питоне)unsignedchar
21.03.2022 09:27Зачем 60 FPS для прогноза погоды и курса доллара? ;)
smll
21.03.2022 12:23+1C какого сайта лучше парсить цену на сахар?
KizhiFox
21.03.2022 17:33Решил подойти к ответу на этот вопрос серьёзно и написал парсер для https://sbermegamarket.ru/catalog/sahar/ :)
Ищет по ключевым словам именно свекольный сахар-песок, а не кусковой, тростниковый и т.д. и высчитывает из цены и веса (ох уж эти 900 грамм) текущий курс 1 кг сахара к рублю. Можно воткнуть в тот же Conky и мониторить как курсы валют :)
https://github.com/KizhiFox/sugar_tracker
Скриншот
Ingtar
21.03.2022 16:00я свой рабочий стол вижу один раз при старте системы, второй раз при ее выключении.
klounader
21.03.2022 16:16у меня при включении открываются ранее открытые окна, потому что при выключении я их не закрываю.
avalak
21.03.2022 18:19Это, конечно, справедливо что conky, rainmeter, etc это про украшение ради украшения.
И что в случае ТС проще было бы использовать готовое.
Впрочем сами по себе скрипты мониторинга штука полезная.
Я себе для i3/i3status делал что-то подобное для формирования статусбара на лету. Отображает только то что важно/актуально: температуру cpu/gpu если выше порога, треки из mpd и тп. Короче вместо именно мониторинга оповещение только если что-то произошло. Бонусом взаимодействие со статусбаром работает (клики по виджетам).
python/asyncio
karay
21.03.2022 16:00Не думаю, что это хорошая идея, каждый раз создавать вложенные функции при вызове update
ck80
21.03.2022 17:10Как уже сказали, в прошлом было уже множество подобных проектов. Я на постоянной основе использовал samurize desktop. Посмотрите его, там и модули и библиотеки. Полный кастомайз
idelgujin
22.03.2022 11:01Вот бы еще exe-шник скомпилированный, который бы город и валюту подтягивал с ini-файла
Al3XS0n
22.03.2022 13:29Я так понимаю открытое окно командной строки это и есть приложение?
Не уверен что это безопасно, но почему бы не запускать "демона", а на обои добавить триггер отключения например?
unsignedchar
Править json в редакторе - плохая идея. Сойдёт и так, конечно, но лучше сделать GUI. Или CLI.