PHP前端开发

如何使用 Python 创建带有时间和日期的动态壁纸

百变鹏仔 3天前 #Python
文章标签 如何使用

如果您曾经想要一张能根据当前时间和日期自动更新的壁纸,那么本教程适合您。我们将使用 python 和一些库(如 pil (pillow))生成图像,添加带有时间和日期的动态文本,然后将此图像设置为 windows 上的壁纸。

我们需要什么?

您可以通过在终端或 cmd 中运行以下命令来安装 pillow:pip installpillow

立即学习“Python免费学习笔记(深入)”;

1. 导入和初始配置

在脚本的开头,我们导入必要的库并定义一些初始参数,例如背景颜色、文本颜色、字体大小和字体文件路径:

from pil import image, imagedraw, imagefontimport ctypes, os, time, iofrom datetime import datetimebackground_color = (0, 0, 0)  # color de fondo (negro)text_color = (22, 230, 69)  # color del texto (verde)font_size = 30font_path = r"c:/users/david/desktop/firacoderegular.ttf"  # ruta de la fuentefont = imagefont.truetype(font_path, font_size)screen_width = 1920screen_height = 1080

2. 设置日期和时间的格式

我们定义一个函数来确保日期和时间数字始终采用两位数字格式:

def two_digits_format(number):    return f"0{number}" if number < 10 else number

例如,“5”天将被格式化为“05”,小时、分钟和秒也会发生同样的情况。

3. 生成带有日期和时间的图像

add_text_to_image() 函数创建一个新的空白图像,其大小与屏幕大小(在本例中为 1920x1080)并在中心绘制文本:

def agregar_texto_a_imagen():    now = datetime.now()    texto = f"""{{    "date": {{        "day": {two_digits_format(now.day)},        "month": {two_digits_format(now.month)},        "year": {now.year}    }},    "time": {{        "hour": {two_digits_format(now.hour)},        "minute": {two_digits_format(now.minute)},        "second":  {two_digits_format(now.second)},        "meridiem": "{now.strftime("%p")}"    }}}}"""

在此函数中,我们使用 datetime.now() 获取当前日期和时间,然后将文本格式化为 json 格式。这在我们生成的图像中呈现。

然后,我们计算屏幕的中心以将文本放置在那里:

bbox = draw.textbbox((0, 0), texto, font=font)ancho_texto = bbox[2] - bbox[0]altura_texto = bbox[3] - bbox[1]posicion_x = (ancho_imagen - ancho_texto) // 2posicion_y = (altura_imagen - altura_texto) // 2posicion = (posicion_x, posicion_y)

4. 将图像设置为壁纸

set_as_wallpaper()函数将生成的图像保存为临时文件,然后将其设置为壁纸:

def establecer_como_wallpaper(imagen_bytes):    temp_path = r"c:/users/david/pictures/temp_wallpaper.bmp"    if os.path.exists(temp_path):        os.remove(temp_path)    with open(temp_path, "wb") as f:        f.write(imagen_bytes.read())    ctypes.windll.user32.systemparametersinfow(        20, 0, temp_path, 3    )  # establecer la imagen temporal

这里,ctypes.windll.user32.systemparametersinfow 是一个 windows 函数,允许您更改壁纸。

5.壁纸持续更新

在 while true: 循环中,每秒生成一次图像并设置为壁纸:

while True:    start_time = time.time()    imagen_bytes = agregar_texto_a_imagen()    establecer_como_wallpaper(imagen_bytes)    elapsed_time = time.time() - start_time    if elapsed_time < 1:        time.sleep(1 - elapsed_time)    else:        time.sleep(1)

此循环确保壁纸每秒更新一次当前时间和日期。

完整代码在这里:github

结论

此代码提供了一种生成始终显示当前时间和日期的动态壁纸的简单方法。您可以通过调整颜色、字体和图像大小来自定义壁纸的外观。此外,代码设计得很高效,壁纸每秒都会更新。

如果您正在寻找一种有趣的方式来学习 python 中的图像处理以及如何与操作系统交互,那么这个项目是一个很好的起点。