Pygame sur plusieurs fichiers

Fermé
C_Dedev - Modifié le 19 août 2022 à 12:56
 Flayme - 23 août 2022 à 20:34

Bonjour,

J'aimerais comprendre pourquoi je ne peux pas séparer les tâches pygame dans plusieurs fichiers.

Dans l'exemple 1, la fenêtre s'ouvre normalement et peut être refermée lorsqu'on clique sur le bouton correspondant

import pygame
import sys

pygame.init()
print('openning app')
pygame.display.set_caption('title')
pygame.display.set_mode((100, 100))
running = True
while running is True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            print('closing app')
            pygame.quit()
            sys.exit()

Dans l'exemple 2, (option voulue) la procédure de fermeture est dans un autre fichier importé dans la procédure d'ouverture de la fenêtre

import pygame
import file

pygame.init()
print('openning app')
pygame.display.set_caption('title')
pygame.display.set_mode((100, 100))
running = True
while running is True:
    file
import pygame
import sys
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
        print('closing app')
        pygame.quit()
        sys.exit()

Dans ce cas la console me dit que la fenêtre n'est pas encore ouverte

pygame.error: video system not initialized
A voir également:

4 réponses

Bonjour, essaie de faire une chronologie de ce qu'il se passe dans ton code afin de  comprendre pourquoi cette erreur.

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 19 août 2022 à 11:44

Bonjour,

Ah tiens, c'est marrant, ça !

J'ignorais que l'on pût invoquer directement un fichier importé par son nom, sans qu'il y ait de fonction dedans:

prog.py:

import file

file

et file .py:

print('closing ...')

Je me coucherais moins bête ce soir ... 

0

Bonjour, je ne sais si j'ai compris ce que tu dis (si je me trompe, désolé), mais le code hors fonction, classe, etc, d'un module est exécuté à l'import du fichier, le file en ligne 3 ne sert à rien.

0
C_Dedev > regglyss
19 août 2022 à 14:57

Ah oui

0
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 7 801
19 août 2022 à 13:05

Bonjour,

Le problème dans ton 2nd exemple, c'est que pygame est réimporté, d'où le message d'erreur. Je ne pense pas que tu puisses découper ton fichier en deux de manière élégante comme tu tentes de le faire (et à vrai dire je ne vois pas trop l'intérêt). Mais si c'est vraiment ce que tu veux faire, peut-être peux tu passer le module pygame en paramètre a une fonction qui sera implémentée dans un second fichier...

Bonne chance

0

C'est normal que ça ne marche pas, il faut mettre ton code dans une fonction:

main.py (j'ai enlever le 'is True' qui ne sert à rien):

import pygame
from file import quitter

pygame.init()
print('openning app')
pygame.display.set_caption('title')
pygame.display.set_mode((100, 100))
running = True
while running:
    quitter()

file.py:

import pygame
import sys


def quitter():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            print('closing app')
            pygame.quit()
            sys.exit()
0