第5回課題

パソコンの壁紙を3分毎に変更するプログラム

  1. ・すぐに壁紙に飽きてしまうので、時間ごとに変わるといいと思った。


  2. ソースコード
    1. import ctypes
    2. import os
    3. import glob
    4. import time
    5. import threading
    6. import random
    7. import codecs
    8. import sys
    9. #import→外からデータを取り込む
    10. #ctypes→外部関数ライブラリ(他の人が作った機能を使えるようにしたもの?)を使うのを可能にする。
    11. #os→オペレーティングシステム、ソフトウェアとハードウェアを仲介してコンピュータを制御する。
    12. #glob→特定の条件にマッチするファイルを取得してプログラム内で使うのを可能にする。
    13. #threading→マルチスレッドプログラミング(アプリのタスクを複数のスレッドに分けて並行処理する方式)を可能にする。
    14. #codecs→データの符号化や圧縮・解凍
    15. #sys→sysという拡張子を使うのを可能にする?
    16. INTERVAL_SEC = 3
    17. #壁紙が変わるまでの秒数を指定
    18. class BgSlider():#classによってデータを入れる領域と処理の仕方を書く領域を設ける。
    19.     def __init__(self):
    20.         self.index = 0
    21.         self.directory = None
    22.     def setup(self):
    23.         global off
    24.         with codecs.open(r'C:\Users\あゆみ\mygit\xbp\de12\images', 'r', 'utf-8') as f:
    25.             lines = f.readlines()
    26.             self.directory = lines[0].strip()
    27.             #好きな画像をファイルとして取り込む
    28.             #ここがうまくいかない!
    29.     def worker(self):
    30.         path = self.directory + r'\*.jpg'
    31.         path.replace('\\\\', '\\')
    32.         files = glob.glob(path)
    33.         # [print(file) for file in files] # ファイルリストをコンソールにまとめて出力するときに使う
    34.         # file = files[random.randint(0, len(files) - 1)] # ランダムにしたい場合はここを使う
    35.         files = sorted(files) # 順番に表示したい場合はここを使う
    36.         file = files[self.index] # 順番に表示したい場合はここを使う
    37.         print(file)
    38.         ctypes.windll.user32.SystemParametersInfoW(20, 0, file, 0)
    39.         if self.index == len(files) - 1:
    40.             self.index = 0
    41.         else:
    42.             self.index += 1
    43.         time.sleep(INTERVAL_SEC)
    44.     def schedule(self, interval, f, wait=True):
    45.         base_time = time.time()
    46.         next_time = 0
    47.         while True:#while→指定した条件が真の間、処理を繰り返し実行
    48.             try:
    49.                 t = threading.Thread(target=f)
    50.                 t.start()
    51.                 if wait:
    52.                     t.join()
    53.                 next_time = ((base_time - time.time()) % interval) or interval
    54.                 time.sleep(next_time)
    55.             except KeyboardInterrupt:
    56.                 exit()
    57. if __name__ == "__main__":
    58.     try:
    59.         bg = BgSlider()
    60.         bg.setup()
    61.         bg.schedule(INTERVAL_SEC, bg.worker, False)
    62.     finally:
    63.         ctypes.windll.user32.SystemParametersInfoW(20, 0, None, 0)


    ・写真のファイルの設定がうまくいかず、写真の表示ができなかった。


  3. 参考にしたサイト