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

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

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

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

  • 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)


  1. unsignedchar
    20.03.2022 14:43

    Править json в редакторе - плохая идея. Сойдёт и так, конечно, но лучше сделать GUI. Или CLI.


  1. lart
    20.03.2022 15:39
    +5

    rainmeter.net


    1. idelgujin
      22.03.2022 10:58

      У Раинметра что-то погода в последнее время отваливаться стала.


  1. Jury_78
    20.03.2022 16:03

    Это что то вроде Conky для Windows :)


    1. vaiobook
      21.03.2022 10:05
      +3

      что-то вроде active desktop '98


  1. shaman4d
    20.03.2022 16:05
    +2

    А как это работает когда несколько мониторов с разным разрешением?


    1. Kazehay
      22.03.2022 11:17

      Надо пробовать. Вечером попробую, если не забуду


  1. Maksim-Burtsev
    20.03.2022 16:10
    +2

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

    А так интересно:)


  1. SShtole
    20.03.2022 16:35
    +2

    Я б не стал выбирать гарнитуру, вывод которой курса доллара выглядит как 703.95. Опасно для сердечной мышцы.


  1. Kellis
    20.03.2022 19:18
    +3

    Как альтернатива можно сделать свою обоину в Wallpaper Engine - они точно собаку съели на живых обоях.


  1. leonP4
    20.03.2022 20:29
    +2

    Как ранее в комментариях подметили, есть уже множество готового софта для данной задачи, но Ваш вариант интересен с точки зрения реализации и подхода, почему бы не уделить этому больше внимания?

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


  1. dinisoft
    21.03.2022 05:28

    Ну что... Только вот cashe очень смущает. :(


  1. hzs
    21.03.2022 08:12
    +2

    И вот, спустя каких-то 20 лет, мы можем вспомнить что был когда-то Active Desktop, который превращал в винде рабочий стол в веб страницу. Если мне не изменяет память, уже тогда существовал DHTML и уже в начале двухтысячных можно было создавать динамические страницы


  1. HemulGM
    21.03.2022 09:00

    Это ужасная идея - Менять изображение каждые несколько секунд на рабочем столе. Живые обои делаются не так. Ваш вариант "живых обоев" обеспечит максимум 1 кадр в 2-3 секунды, в то время как реальные живые обои позволяют отображать более 60 кадров в секунду, чтоб обеспечить реальную и плавную анимацию.
    И делается это достаточно просто (не на питоне)


    1. unsignedchar
      21.03.2022 09:27

      Зачем 60 FPS для прогноза погоды и курса доллара? ;)


      1. HemulGM
        21.03.2022 09:45

        Речь о живых обоях, а это слайд шоу.


        1. unsignedchar
          21.03.2022 09:57

          Да, слово "живые" в кавычках ;)


  1. pioli
    21.03.2022 10:05

    Rainmeter, не?


  1. smll
    21.03.2022 12:23
    +1

    C какого сайта лучше парсить цену на сахар?


    1. KizhiFox
      21.03.2022 17:33

      Решил подойти к ответу на этот вопрос серьёзно и написал парсер для https://sbermegamarket.ru/catalog/sahar/ :)

      Ищет по ключевым словам именно свекольный сахар-песок, а не кусковой, тростниковый и т.д. и высчитывает из цены и веса (ох уж эти 900 грамм) текущий курс 1 кг сахара к рублю. Можно воткнуть в тот же Conky и мониторить как курсы валют :)

      https://github.com/KizhiFox/sugar_tracker

      Скриншот


      1. Jury_78
        21.03.2022 19:50

        Спасибо за простой пример для Soup.


        1. KizhiFox
          21.03.2022 20:12

          Да не за что)


  1. Ingtar
    21.03.2022 16:00

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


    1. klounader
      21.03.2022 16:16

      у меня при включении открываются ранее открытые окна, потому что при выключении я их не закрываю.


    1. avalak
      21.03.2022 18:19

      Это, конечно, справедливо что conky, rainmeter, etc это про украшение ради украшения.

      И что в случае ТС проще было бы использовать готовое.

      Впрочем сами по себе скрипты мониторинга штука полезная.

      Я себе для i3/i3status делал что-то подобное для формирования статусбара на лету. Отображает только то что важно/актуально: температуру cpu/gpu если выше порога, треки из mpd и тп. Короче вместо именно мониторинга оповещение только если что-то произошло. Бонусом взаимодействие со статусбаром работает (клики по виджетам).

      python/asyncio


  1. karay
    21.03.2022 16:00

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


  1. ck80
    21.03.2022 17:10

    Как уже сказали, в прошлом было уже множество подобных проектов. Я на постоянной основе использовал samurize desktop. Посмотрите его, там и модули и библиотеки. Полный кастомайз


  1. idelgujin
    22.03.2022 11:01

    Вот бы еще exe-шник скомпилированный, который бы город и валюту подтягивал с ini-файла


  1. Al3XS0n
    22.03.2022 13:29

    Я так понимаю открытое окно командной строки это и есть приложение?

    Не уверен что это безопасно, но почему бы не запускать "демона", а на обои добавить триггер отключения например?