78 lines
2.9 KiB
Python
78 lines
2.9 KiB
Python
import os
|
|
import tkinter as tk
|
|
from PIL import Image, ImageTk, ImageDraw, ImageFont
|
|
import threading
|
|
import time
|
|
|
|
def load_images_from_folder(folder):
|
|
"""从指定文件夹加载图像文件,并按文件前的数字排序."""
|
|
images = []
|
|
for filename in sorted(os.listdir(folder), key=lambda x: float(x[:-4]), reverse=True):
|
|
if filename.endswith(('.png', '.jpg', '.jpeg')): # 只处理图像文件
|
|
img_path = os.path.join(folder, filename)
|
|
images.append((img_path, filename[:-4])) # 返回图像路径及文件名(去掉扩展名)
|
|
return images
|
|
|
|
def create_image_viewer(folder_path):
|
|
"""创建图像查看器并展示指定文件夹中的图像, 返回刷新函数."""
|
|
|
|
def show_images():
|
|
"""显示前五张图像于标签中."""
|
|
for i, (image_path, filename) in enumerate(images[:8]):
|
|
img = Image.open(image_path).convert("RGBA")
|
|
img = img.resize((200, 200), Image.Resampling.LANCZOS) # 调整图像大小,使用 LANCZOS
|
|
|
|
# 在图像上添加文本
|
|
draw = ImageDraw.Draw(img)
|
|
font = ImageFont.load_default() # 使用默认字体
|
|
text_position = (10, 10) # 文本位置
|
|
try:
|
|
font = ImageFont.truetype("arial.ttf", 30) # 加载自定义字体并设置大小
|
|
except IOError:
|
|
font = ImageFont.load_default() # 如果无法加载自定义字体则使用默认字体
|
|
draw.text(text_position, f"{filename} M", fill="red",font=font) # 添加文本
|
|
|
|
img = ImageTk.PhotoImage(img)
|
|
|
|
# 计算位置并创建标签显示图像
|
|
image_label = tk.Label(root, image=img)
|
|
image_label.image = img # type: ignore # 保持对图像的引用
|
|
image_label.grid(row=i//2, column=i%2) # 放置在一列中,垂直排列
|
|
|
|
def refresh_images():
|
|
"""刷新图像列表."""
|
|
nonlocal images
|
|
images = load_images_from_folder(folder_path) # 重新加载图像
|
|
for widget in root.grid_slaves(): # 清除之前的图像标签
|
|
widget.destroy()
|
|
show_images() # 显示新图像
|
|
|
|
def auto_refresh():
|
|
"""每五秒自动刷新图像."""
|
|
while True:
|
|
refresh_images()
|
|
time.sleep(10)
|
|
|
|
# 创建Tkinter窗口
|
|
root = tk.Tk()
|
|
root.title("Display Faces Images")
|
|
|
|
# 加载图像
|
|
images = load_images_from_folder(folder_path)
|
|
|
|
# 显示图像
|
|
show_images()
|
|
|
|
# 启动自动刷新线程
|
|
refresh_thread = threading.Thread(target=auto_refresh, daemon=True)
|
|
refresh_thread.start()
|
|
|
|
# 启动程序
|
|
root.after(0, lambda: root.focus_force()) # 确保窗口获得焦点
|
|
root.mainloop()
|
|
|
|
# 使用示例:
|
|
if not os.path.exists("faces"):
|
|
os.makedirs("faces")
|
|
folder_path = "faces" # 图像文件夹路径
|
|
create_image_viewer(folder_path) |