壁紙の自動変更

同じ壁紙だとつまらない。勝手に変わってくれないかな。という悩みを解消できます。


        import ctypes
import os
import glob
import time
import threading
import random
import codecs
import sys
import glob

INTERVAL_SEC = 3


class BgSlider():
    def __init__(self):
        self.index = 0
        self.directory = None

    def setup(self):
        global off
        print(glob.glob("./de12/python/*.txt"))
        with codecs.open('./de12/python/path.txt', 'r', 'utf-8') as f:
            lines = f.readlines()
            self.directory = lines[0].strip()

    def worker(self):
        path = self.directory + r'\*.jpg'
        path.replace('\\\\', '\\')
        files = glob.glob(path)
        # [print(file) for file in files] # ファイルリストをコンソールにまとめて出力するときに使う
        # file = files[random.randint(0, len(files) - 1)] # ランダムにしたい場合はここを使う
        files = sorted(files) # 順番に表示したい場合はここを使う
        file = files[self.index] # 順番に表示したい場合はここを使う
        print(file)
        ctypes.windll.user32.SystemParametersInfoW(20, 0, file, 0)
        if self.index == len(files) - 1:
            self.index = 0
        else:
            self.index += 1
        time.sleep(INTERVAL_SEC)

    def schedule(self, interval, f, wait=True):
        base_time = time.time()
        next_time = 0
        while True:
            try:
                t = threading.Thread(target=f)
                t.start()
                if wait:
                    t.join()
                next_time = ((base_time - time.time()) % interval) or interval
                time.sleep(next_time)
            except KeyboardInterrupt:
                exit()


if __name__ == "__main__":
    try:
        bg = BgSlider()
        bg.setup()
        bg.schedule(INTERVAL_SEC, bg.worker, False)
    finally:
        ctypes.windll.user32.SystemParametersInfoW(20, 0, None, 0)
    

三秒に一枚壁紙が自動的に変わります。また、ループさせることも可能。