Pygame sur plusieurs fichiers

C_Dedev -  
 Flayme -

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

4 réponses

  1. regglyss
     

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

    0
  2. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    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
    1. regglyss
       

      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
      1. C_Dedev > regglyss
         

        Ah oui

        0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     

    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
  4. Flayme
     

    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