Mon code fonctionne avec python3.5 mais pas avec python3.4.
Il ya a une erreur d'import avec python3.4 :
Traceback (most recent call last):
File "/home/*/dev/python/rasp/mon_app/mon_app.py", line 1, in <module>
from code.main import main
File "/home/*/dev/python/rasp/mon_app/code/main.py", line 3, in <module>
from .scenes import scene_1
File "/home/*/dev/python/rasp/mon_app/code/scenes/scene_1.py", line 4, in <module>
from . import scene_2
File "/home/*/dev/python/rasp/mon_app/code/scenes/scene_2.py", line 4, in <module>
from . import scene_1
ImportError: cannot import name 'scene_1'
Process finished with exit code 1
Je comprends pas pourquoi ça fonctionne bien avec python3.5 et pas python3.4.
Je veux utiliser python3.4 parce que c'est la version fournie avec raspbian.
Quel est le problème ?
arborescence de l'application :
mon_app.py
code/
main.py
__init__.py
scenes/
scene_base.py
scene_1.py
scene_2.py
pour lancer l'application je tape la commande : python3 mon_app.py
fichier mon_app.py
from code.main import main
if __name__ == '__main__':
main()
fichier code/main.py
import pygame
from .scenes import scene_1
def run_app(starting_scene):
pygame.init()
screen = pygame.display.set_mode((1024, 768))
clock = pygame.time.Clock()
active_scene = starting_scene
while active_scene != None:
pressed_keys = pygame.key.get_pressed()
filtered_events = []
for event in pygame.event.get():
quit_attempt = False
if event.type == pygame.QUIT:
quit_attempt = True
elif event.type == pygame.KEYDOWN:
alt_pressed = pressed_keys[pygame.K_LALT] or \
pressed_keys[pygame.K_RALT]
if event.key == pygame.K_ESCAPE:
quit_attempt = True
elif event.key == pygame.K_F4 and alt_pressed:
quit_attempt = True
if quit_attempt:
active_scene.terminate()
else:
filtered_events.append(event)
active_scene.process_input(filtered_events, pressed_keys)
active_scene.update()
active_scene.render(screen)
active_scene = active_scene.next
pygame.display.flip()
clock.tick(60)
def main():
run_app(scene_1.Scene1())
le fichier code/init.py est vide
fichier code/scenes/scene_base.py
class SceneBase:
def __init__(self):
self.next = self
def process_input(self, events, pressed_keys):
pass
def update(self):
pass
def render(self, screen):
pass
def switch_to_scene(self, next_scene):
self.next = next_scene
def terminate(self):
self.switch_to_scene(None)
fichier code/scenes/scene_1.py
import pygame
from . import scene_base
from . import scene_2
class Scene1(scene_base.SceneBase):
def __init__(self):
super().__init__()
def process_input(self, events, pressed_keys):
super().process_input(events, pressed_keys)
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self.switch_to_scene(scene_2.Scene2())
def render(self, screen):
screen.fill((0,0,255))
fichier code/scenes/scene_2.py
import pygame
from . import scene_base
from . import scene_1
class Scene2(scene_base.SceneBase):
def __init__(self):
super().__init__()
def process_input(self, events, pressed_keys):
super().process_input(events, pressed_keys)
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self.switch_to_scene(scene_1.Scene1())
def render(self, screen):
screen.fill((255,0,255))
En appyant sur la flèche gauche, cela permet de changer de scene.