在Python、Pygame中从与项目相同的文件夹加载图像

2024-03-28 17:07:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python制作一个冒险游戏,我需要知道如何导入图像,它与pygame的代码位于同一文件夹中。怎么做?我试过了

Character = pygame.image.load('Resources/MainCharFront.png')

但我有一个错误:

pygame.error: Couldn't open Resources/MainChar_Front.png

我真的需要它在同一个文件夹,因为我经常切换设备,我的文件系统总是不同的


Tags: 代码图像image文件夹png错误loaderror
2条回答

如果您已经将代码结构化为Python包(您应该这样做),那么可以使用pkg_resources模块访问项目中的资源文件,如图像等

例如,如果我有以下布局:

./mypackage/__init__.py
./mypackage/main.py
./mypackage/images/character.jpg

我可以用mypackage/main.py写:

import pygame
import pkg_resources


Character = pygame.image.load(
    pkg_resources.resource_filename('mypackage', 'images/character.jpg'))

您可以在下面的操作中看到这一点:

>>> import mypackage.main
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
>>> mypackage.main.Character
<Surface(359x359x24 SW)>
>>>

在您的注释中,您说图像与代码位于同一目录中,但是您显示的路径暗示您正试图从名为Resources的子目录加载图像:

Character = pygame.image.load('Resources/MainCharFront.png')

因此,您可以通过使用以下方法从路径ans中删除该路径来解决问题:

Character = pygame.image.load('MainCharFront.png')

然而,这不是我建议的方法。您最好将资源保存在一个单独的子目录中,如Resources,以尝试并保持组织。您说过您希望使用平面结构,将所有内容都放在一个文件夹中,因为您可以在具有不同文件系统的不同系统之间移动游戏。我将假设您在这些不同的系统上遇到了路径分隔符问题。不过,这相当容易处理

@larsks已经提出了一种很好的方法。不过,您不必走得太远,仍然能够保持资源中的结构

处理不同文件系统上不同路径分隔符的简单方法是使用os.path.join()将路径组件与文件系统相应的分隔符链接,如下所示:

Character = pygame.image.load(os.path.join('Resources', 'MainCharFront.png'))

这将允许您在Windows、Linux等之间移动,而无需扁平化您的结构。os.path.join()可以将多个路径组件作为参数,而不仅仅是2个,因此您可以根据需要拥有尽可能多的层次结构。只需将路径字符串拆分为斜杠所在的单独字符串。像这样:

os.path.join('Resources', 'images', 'MainCharFront.png')

您可以找到os.path.join()命令here的文档

非常清楚地说,os.path.join()方法与标准的string join()方法不同(它使用您告诉它的分隔符连接字符串)。os.path.join()方法根据正在运行它的系统为您确定分隔符

相关问题 更多 >