小能豆

如何使用 pygame 从 python 中的用户指定文件夹导入所有图像

py

如何使用 pygame 从 python 中的用户指定文件夹导入所有图像


阅读 18

收藏
2025-01-01

共1个答案

小能豆

要从用户指定的文件夹中导入所有图像并在 Pygame 中加载,可以按以下步骤操作:

  1. 让用户选择文件夹:使用 Python 的 tkinter.filedialog 或其他库获取用户选择的文件夹路径。
  2. 从文件夹加载图像:使用 os 模块列出文件夹中的所有图像文件。
  3. 过滤有效图像:确保只加载支持的图像文件(如 .png, .jpg 等)。
  4. 使用 Pygame 加载图像:通过 pygame.image.load 加载图像并转换为 Pygame 支持的表面。

以下是完整的代码实现:

实现代码

import os
import pygame
from tkinter import Tk
from tkinter.filedialog import askdirectory

def load_images_from_folder(folder):
    """加载指定文件夹中的所有图像"""
    images = {}
    supported_formats = ('.png', '.jpg', '.jpeg', '.bmp', '.gif')

    for filename in os.listdir(folder):
        if filename.lower().endswith(supported_formats):
            filepath = os.path.join(folder, filename)
            try:
                images[filename] = pygame.image.load(filepath).convert_alpha()
            except pygame.error as e:
                print(f"无法加载图像 {filename}: {e}")
    return images

def main():
    # 初始化 Pygame
    pygame.init()

    # 创建窗口
    screen = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("图像加载器")

    # 选择文件夹
    Tk().withdraw()  # 隐藏 Tkinter 主窗口
    folder = askdirectory(title="选择包含图像的文件夹")
    if not folder:
        print("未选择文件夹。")
        return

    # 加载图像
    images = load_images_from_folder(folder)
    print(f"加载了 {len(images)} 张图像:{list(images.keys())}")

    # 显示图像
    running = True
    image_keys = list(images.keys())
    current_image_index = 0

    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:  # 切换到下一张图像
                    current_image_index = (current_image_index + 1) % len(image_keys)
                elif event.key == pygame.K_LEFT:  # 切换到上一张图像
                    current_image_index = (current_image_index - 1) % len(image_keys)

        # 清屏
        screen.fill((0, 0, 0))

        # 显示当前图像
        if images:
            current_image = images[image_keys[current_image_index]]
            rect = current_image.get_rect(center=screen.get_rect().center)
            screen.blit(current_image, rect.topleft)

        # 刷新屏幕
        pygame.display.flip()

    pygame.quit()

if __name__ == "__main__":
    main()

说明

  1. 图像格式:支持的图像格式通过 supported_formats 指定,可根据需要扩展。
  2. 用户选择文件夹:使用 tkinter.filedialog.askdirectory 获取用户选择的文件夹路径。
  3. 错误处理:加载失败时会打印错误消息。
  4. 图像显示
  5. 使用左右方向键切换图像。
  6. 在窗口居中显示当前图像。

示例运行步骤

  1. 运行脚本,弹出一个对话框供用户选择包含图像的文件夹。
  2. 程序会加载文件夹中的所有图像并在窗口中显示。
  3. 使用左右箭头键切换图像。

注意事项

  • 确保安装了 pygametkinter:可以通过 pip install pygame 安装 Pygame。
  • 图像路径中不要包含特殊字符或不支持的字符集,否则可能导致加载失败。
2025-01-01