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

ID:21813 / 打印

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

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

我们需要什么?

  • 已安装 python:如果您尚未安装 python,可以从 python.org 下载它。

  • 安装库:

    • pillow:处理图像。
    • ctypes:与操作系统交互并更改 windows 中的壁纸。

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

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

  • 字体文件:我们需要 truetype 字体 (.ttf) 来渲染图像上的文本。在示例代码中,我们使用 firacode 字体,但您可以使用任何您喜欢的字体。

1. 导入和初始配置

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

from pil import image, imagedraw, imagefont import ctypes, os, time, io from datetime import datetime  background_color = (0, 0, 0)  # color de fondo (negro) text_color = (22, 230, 69)  # color del texto (verde) font_size = 30 font_path = r"c:/users/david/desktop/firacoderegular.ttf"  # ruta de la fuente font = imagefont.truetype(font_path, font_size)  screen_width = 1920 screen_height = 1080 
  • pillow(image、imagedraw、imagefont)用于创建图像并绘制文本。
  • ctypes 用于更改 windows 中的壁纸。
  • 时间和日期时间允许我们管理时间和日期。
  • background_color 和 text_color 是我们将用于背景和文本的颜色。

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) // 2 posicion_y = (altura_imagen - altura_texto) // 2 posicion = (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 中的图像处理以及如何与操作系统交互,那么这个项目是一个很好的起点。

上一篇: 理解 Python 中的闭包
下一篇: 寻求帮助为 Pokémon 数据创建一个简单的 API

作者:admin @ 24资源网   2025-01-14

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。