windows自带幻灯片壁纸功能,但我发现它有时会导致一个叫"Shell Infrastructure Host"的进程占用大量CPU资源。为了平衡一个阿宅对CPU和二次元的需求,敲点代码代替它。
功能:选择文件夹,定时随机切换壁纸。可以通过托盘图标修改参数或即时切换。
原理是很简单的,只用到一个api,只不过为了方便和美观做了些改进。
用到的第三方库有 easygui, pystray, APScheduler和configparser, 分别是用来提供对话框、托盘图标(算作提供一个操作入口,不过像windows那样在桌面右键菜单里加选项似乎更方便一点)、定时任务调度和参数解析。
不想打包的话可以把py文件后缀改成pyw,这样就没有控制台窗口了。
from easygui import diropenbox,integerbox,boolbox # 简单对话框
from random import randint # 随机数
from os import listdir # 读取文件名
from os.path import join # 合并路径
from PIL.Image import open as openImage # 读取图片
from pystray import MenuItem,Icon # 托盘图标
from ctypes import windll # 设置壁纸的api
from apscheduler.schedulers.background import BackgroundScheduler # 定时任务
from datetime import datetime # 提供now()函数以即时触发任务
from configparser import ConfigParser # 读取参数
class WallpaperChanger:
def __init__(self):
self.initConfig() # 初始化参数
self.setScheduler() # 设置调度器
self.setIcon() # 设置托盘
def initConfig(self):
self.index = 0
try:
self.readConfig()
except:
self.config = None
self.path = ''
self.timeSep = 360
self.random = False
self.setConfig(setRandom=False)
# 为了方便,默认不开启随机
def readConfig(self):
# 读取参数
print('读取参数...')
self.config = ConfigParser()
self.config.read('config.ini')
self.path = self.config['DEFAULT']['path']
print('图片路径: %s'