tl; dr Обычный способ использования python для установки фона рабочего стола с помощью ctypes слишком медленный для анимации. Мне интересно, есть ли у меня какие-либо варианты установки фона на O (5 кадров в секунду) без ущерба для производительности моего компьютера.
~~~~
Привет, ребята!
На днях я был взволнован этой идеей: я хотел, чтобы мой фон рабочего стола проходил по самым последним изображениям Солнца (из SDO), загруженным с веб-сайта НАСА. И это сработало! У меня есть код, который работает в фоновом режиме на моем компьютере, и обновляет мой рабочий стол каждые тридцать секунд до самого нового изображения из Интернета (оно также циклически изменяет длину волны. Очень весело!). И это действительно круто! Смотреть на это каждый день и видеть, как меняется солнце - это круто. Так что это успех.
Но у Солнца также есть много краткосрочной динамики, которую я тоже хотел бы наблюдать! Итак, я думал, решение достаточно простое! Просто сохраните последние 30 изображений, которые вы скачали, и подайте на них быстрый огонь! Петля достаточно проста (перегнана до базовых компонентов):
import os
import ctypes
import time
#Get the filepaths of all pictures in a folder
folderPath = fromGod()
items = os.listdir(folderPath)
listOfFiles = [folderPath + item for item in items]
frameTime = 0.25 #second
runFor = 30 #seconds
#Cycle through the pictures
startTime = time.time()
while time.time() - startTime < runFor:
for file in listOfFiles:
ctypes.windll.user32.SystemParametersInfoW(20, 0, file , 0)
time.sleep(frameTime)
Это действительно работает! Это выглядит довольно хорошо, и я бы даже согласился на 4 кадра в секунду, на которые он способен, прежде чем он вообще перестанет работать. Проблема в том, что каждый вызов функции ctypes приводит к зависанию всей системы. заикаться ?, помедленнее?}. Это полностью убивает идею, потому что я не могу позволить этому коду работать в фоновом режиме. Это заставляет мою мышь заикаться по моему экрану.
Но я вижу, что существуют программы, которые могут превратить фон рабочего стола в фильм, поэтому я надеюсь, что есть другой способ сделать это самостоятельно в Python. Наверное, я просто не понимаю, почему у этой функции такая утечка в системе. Но поиск здесь по переполнению стека и в Google не был плодотворным с точки зрения альтернативных способов сделать это.
Я работаю на ноутбуке Dell Windows 10 с Python 3.6.5 в форме Anaconda.