Загрузка изображения из той же папки, что и проект в Python, Pygame - PullRequest
1 голос
/ 26 апреля 2020

Я пытаюсь сделать приключенческую игру на python, и мне нужно знать, как импортировать изображение, которое находится в той же папке, что и код с pygame. Как это сделать? Я пробовал

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

, но получаю сообщение об ошибке:

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

Мне действительно нужно, чтобы он был в одной папке, потому что я часто переключаю устройства и мою файловую систему всегда отличается.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Если вы структурировали свой код как пакет Python (что вам следует), вы можете использовать модуль pkg_resources для доступа к файлам ресурсов, таким как изображения, например, c, которые являются частью вашего проект.

Например, если у меня есть следующий макет:

./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)>
>>>
0 голосов
/ 26 апреля 2020

В своем комментарии вы говорите, что изображение находится в том же каталоге, что и ваш код, однако указанный вами путь подразумевает, что вы пытаетесь загрузить его из подкаталога с именем Resources :

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

Таким образом, вы, скорее всего, можете исправить свою проблему, удалив ее из пути и просто используя:

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

Однако я не рекомендую этот подход. Вам лучше хранить ресурсы в отдельном подкаталоге, например, ресурсы, чтобы все было организовано. Вы сказали, что хотите использовать плоскую структуру со всем в одной папке, потому что вы перемещаете игру между разными системами с разными файловыми системами. Исходя из этого, я предполагаю, что у вас есть проблемы с разделителем пути в этих разных системах. С этим довольно легко справиться.

@ larsks предложил один из подходов, который является хорошим. Вам не нужно слишком далеко заходить go, чтобы иметь возможность сохранять структуру в своих ресурсах.

Простой способ иметь дело с разными разделителями пути в разных файловых системах - это использовать os.path.join () , чтобы связать компоненты пути с соответствующим разделителем файловой системы, например так:

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

Это позволит вам перемещаться между Windows, Linux, et c. без необходимости выравнивать вашу структуру. os.path.join () может принимать в качестве аргументов несколько компонентов пути, а не только 2, поэтому вы можете иметь столько иерархии, сколько вам нужно. Просто разбейте строку пути на отдельные строки, где будут косые черты. как это:

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

Вы можете найти документы для os.path.join () здесь здесь

Просто чтобы быть чрезмерно ясно, что метод os.path.join () отличается от стандартного метода string join () (который объединяет строки с использованием разделителя, который вы указали). Метод os.path.join () определяет разделитель для вас в зависимости от системы, в которой он запущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...