Si alguna vez has querido tener un wallpaper (fondo de pantalla) que se actualice automáticamente con la hora y la fecha actual, este tutorial es para ti. Usaremos Python y algunas bibliotecas como PIL (Pillow) para generar una imagen, agregar texto dinámico con la hora y la fecha, y luego establecer esta imagen como fondo de pantalla en Windows.
¿Qué necesitamos?
Python instalado: Si aún no tienes Python instalado, puedes descargarlo desde python.org.
-
Instalar bibliotecas:
- Pillow: Para trabajar con imágenes.
- ctypes: Para interactuar con el sistema operativo y cambiar el fondo de pantalla en Windows.
Puedes instalar Pillow ejecutando el siguiente comando en tu terminal o cmd: pip install pillow
- Un archivo de fuente: Necesitamos una fuente TrueType (.ttf) para renderizar el texto en la imagen. En el código de ejemplo, usamos la fuente FiraCode, pero puedes utilizar cualquier fuente que prefieras.
1. Importaciones y configuración inicial
Al comienzo del script, importamos las bibliotecas necesarias y definimos algunos parámetros iniciales como el color de fondo, el color del texto, el tamaño de la fuente y la ruta del archivo de la fuente:
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) se utiliza para crear la imagen y dibujar el texto.
- ctypes se usa para cambiar el wallpaper en Windows.
- time y datetime nos permiten manejar los tiempos y fechas.
- background_color y text_color son los colores que usaremos para el fondo y el texto.
2. Formateo de la fecha y hora
Definimos una función para asegurarnos de que los números de la fecha y la hora se formateen siempre con dos dígitos:
def two_digits_format(number):
return f"0{number}" if number < 10 else number
Por ejemplo, el día "5" se formateará como "05", y lo mismo ocurrirá con la hora, minuto y segundo.
3. Generar la imagen con la fecha y hora
La función agregar_texto_a_imagen() crea una nueva imagen en blanco con el tamaño de la pantalla (en este caso, 1920x1080) y dibuja el texto en el centro:
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")}"
}}
}}"""
En esta función, obtenemos la fecha y la hora actual utilizando datetime.now(), y luego formateamos el texto en formato JSON. Esto se renderiza en la imagen que generamos.
Después, calculamos el centro de la pantalla para colocar el texto allí:
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. Establecer la imagen como fondo de pantalla
La función establecer_como_wallpaper() guarda la imagen generada como un archivo temporal y luego la establece como el fondo de pantalla:
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
Aquí, ctypes.windll.user32.SystemParametersInfoW es una función de Windows que permite cambiar el fondo de pantalla.
5. Actualización continua del wallpaper
En el ciclo while True:, la imagen se genera y se establece como fondo de pantalla una vez por segundo:
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)
Este ciclo asegura que el fondo de pantalla se actualice cada segundo con la hora y la fecha actuales.
Código completo aquí: GitHub
Conclusión
Este código ofrece una manera sencilla de generar un fondo de pantalla dinámico que siempre muestra la hora y la fecha actual. Puedes personalizar la apariencia del fondo de pantalla ajustando los colores, la fuente y el tamaño de la imagen. Además, el código está diseñado para ser eficiente, con la actualización del fondo de pantalla ocurriendo cada segundo.
Si estás buscando una forma divertida de aprender sobre manipulación de imágenes en Python y cómo interactuar con el sistema operativo, este proyecto es un excelente punto de partida.
Top comments (0)