«Живые» кликабельные обои на Python'е?

«Костыли и велосипеды программируем как умеем».

История появление «гениальных» идей

Гуляя по обширным мусорным завалам на моём рабочем слоте, я понял что ему чего-то не хватает. Так и пришла «гениальная» мысль украсить задний фон рабочего стола хоть каким либо образом. И конечно же я решил использовать питон — легко, сердито.

Используемые библиотеки

  • Pillow — генерировать саму картинку на обои.

  • Ctypes — понадобиться чтобы получать разрешение экрана, позиции и действий мыши.

  • Win32gui — отслеживание текущего окна.

Для начала хотелось просто сделать вывод дня недели и времени на центр экрана. Так я и поступил, но этого стало мало и я решил выводить нагрузку на ЦП и ОЗУ. Но приходилось часто обновлять рабочий стол (каждую секунду), а это оказалось не лучшая идея из-за нагрузки на ЦП, да и с моим то i3.

4962fdcce1686b9793008f961dc17237.png

По итогу пришлось вернуться назад к ежеминутному обновлению. Но при этом я решил добавить курсы валют и погоду. И получилось что-то вроде этого.

f229796e2c8041ef525dd6c021a0e34c.png

Погода парсится напрямую с сайта https://www.gismeteo.ru/ немного хитро и лениво, но всё же — не плохо. Курс валют — https://www.cbr-xml-daily.ru

Но и этого мне стало мало, разобравшись как отслеживать положение и статус мыши я решил сделать «функционирующие» обои, которые будут реагировать на нажатия??? Звучит глупо и странно, но почему бы и нет.

Добавив во время ожидание проверки на нажатие мыши и нажатие по определённым частям экрана (Кнопкам), мне удалось сделать это:

24debae55388663f71e68402a8ad0c70.png

При нажатии на название города, в этом же месте появляется это:

b108ebeb398cb3946336a246683302a9.png

И здесь нажатием на нужный город можно выбрать его и погода будет отображаться именно с этого города.

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

Порыв интернет пол часика — нашёл библиотеку win32gui позволяющую получить сфокусированное приложение тем самым теперь мы реагируем только когда фокусировка на рабочем столе.

А почему бы не сделать кнопку «сменить тему»?

Через некоторое время имеем кнопку сменить тему в нижнем правом углу.

e1a00bdbb7d75e7ed05846dd3b451b54.png

Свои темы добавить достаточно легко и просто.

3fe29390ed6fc17a9389fb327326a9ee.png

Так же на скорую руку добавил сохранение настроек и конфигурация которые вы можете редактировать сами, открыв файл »\resources\cashe\settings.json» как текст.

7eb184ed90fbb924c04137afa08fed71.png

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

Для автозагрузки вместе с виндовс достаточно засунуть один .bat файл в автозагрузку.

Заходим в автозагрузку: Win + R → «shell: startup».

Создаём .bat файл в папке «Автозагрузка» и прописываем туда.

f9766e92c4b7e650653920d8632e72de.png

Версия питона может отличаться. pythonw.exe — запускает питон файлы без консоли (в фоне) Пример батника будет в исходнике.

Исходник

© Habrahabr.ru