2014-11-30 3 views
1

Я сделал игру для понга с бонусами, и он работает в окнах, но в Linux это дает мне ошибку «Can not open paddle.png».Невозможно открыть .png файл в pygame

Опять же, он работает в Windows, но не в Linux.

Пример кода: - ЗНАЧИТ часть кода, НЕ ВЕСЬ THING

import pygame, sys, time 
from random import * 

pygame.init() 

disw = 640 
dish = 480 
black = ( 0, 0, 0) 
white = (255,255,255) 
green = ( 0,255, 0) 

gameDisplay = pygame.display.set_mode((disw, dish)) 
pygame.display.set_caption("Super-Pong", "S-P") 
Clock = pygame.time.Clock() 

playerOne = pygame.image.load("paddle.png") 
playerOneX = 50 
playerOneY = 180 

playerTwo = pygame.image.load("paddle.png") 
playerTwoX = 590 
playerTwoY = 180 

Проблема: Не открывать .png файлы в Linux для программы питона.

Пробовал: Работал в Windows, работал в Windows.

Они находятся в этом же каталоге.

Я также пробовал сделать это paddle.jpg и еще пару форматов, без кубиков.

Моя ошибка:

[[email protected] ~]$ su - 
Password: 
Last login: Sun Nov 30 16:56:52 EST 2014 on pts/0 
[[email protected] ~]# python /home/hunter/Documents/realprojects/superpong/Super-Pong.py 
Traceback (most recent call last): 
    File "/home/hunter/Documents/realprojects/superpong/Super-Pong.py", line 16, in <module> 
    playerOne = pygame.image.load("paddle.png") 
pygame.error: Couldn't open paddle.png 
[[email protected] ~]# 

ответ

2

Когда вы говорите функцию в библиотеке Python для загрузки файла с относительным путем, например, "paddle.png", это будет выглядеть в текущем рабочем каталоге (УХО). И если вы запустите программу Python, а CWD - это домашний каталог пользователя root, Pygame будет искать файлы изображений в домашнем каталоге пользователя root, если не указано иное.

Чтобы изменить место Pygame выглядит для изображений, вам нужно сделать один из трех вещей:

  • Изменить текущий рабочий каталог (cd) в каталог, содержащий paddle.png перед запуском Super-Pong.py. Python для Windows автоматически делает это при двойном щелчке программы Python, поэтому она работает в Windows.
  • В программе измените текущий рабочий каталог на каталог, содержащий paddle.png, который, скорее всего, тот же каталог, содержащий программу (Super-Pong.py). Путь к программе передается как sys.argv[0], поэтому попробуйте сделать следующее: os.chdir(os.path.dirname(__file__))
  • В программу добавьте путь к файлу. Опять же, если предположить paddle.png находится в той же папке, попробуйте следующее: playerOne = pygame.image.load(os.path.join(os.path.dirname(__file__), "paddle.png"))

(почему su - так или иначе?)

+0

Спасибо! И su - in fedora означает login суперпользователя, который позволяет вам получить доступ к любой команде и любой папке. – HKVariant

+0

Вы действительно не должны использовать 'su' здесь, так как (насколько я вижу) приложение Python находится в вашем собственном« доме ». 'su' обычно должен использоваться только в том случае, если ваш собственный пользователь не имеет правильных привилегий, которые в большинстве случаев должны иметь. –

+0

Я просто набрал его, поэтому мне не пришлось бы позже, если бы мне это было нужно. – HKVariant

Смежные вопросы