10 votes

Programmes Pygame suspendus à la sortie

Je suis en train de bricoler avec pygame, et il semble que tous les petits programmes que je crée avec se bloquent lorsque j'essaie de les fermer.

Prenez le code suivant, par exemple :

from pygame.locals import *
pygame.init()
# YEEAAH!
tile_file = "blue_tile.bmp"
SCREEN_SIZE = (640, 480)
SCREEN_DEPTH = 32

if __name__ == "__main__":
    screen = pygame.display.set_mode(SCREEN_SIZE, 0, SCREEN_DEPTH)
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                break

    tile = pygame.image.load(tile_file).convert()
    colorkey = tile.get_at((0,0))
    tile.set_colorkey(colorkey, RLEACCEL)

    y = SCREEN_SIZE[1] / 2
    x = SCREEN_SIZE[0] / 2

    for _ in xrange(50):
        screen.blit(tile, (x,y))
        x -= 7
        y -= 14

Je ne vois pas de problème avec le code, il fonctionne (ignorez le fait que la tuile n'est pas éclairée aux bons endroits), mais il n'y a pas de traceback et la seule façon de le fermer est de tuer le processus python dans le gestionnaire des tâches. Quelqu'un peut-il déceler un problème dans mon code ?

13voto

Reshure Points 1435

Si vous l'exécutez depuis IDLE, alors il vous manque pygame.quit() .

Cela est dû à l'interpréteur python IDLE, qui semble conserver les références d'une manière ou d'une autre. Assurez-vous que vous invoquez pygame.quit() lorsque vous quittez votre application ou votre jeu.

Voir : Dans IDLE, pourquoi la fenêtre Pygame ne se ferme-t-elle pas correctement ?

Et aussi : Documentation Pygame - pygame.quit()

12voto

J.F. Sebastian Points 102961

Où sort-on de la boucle extérieure ?

 while True: # outer loop
     for event in pygame.event.get(): # inner loop
         if event.type == QUIT:
            break # <- break inner loop

4voto

mechanicarts Points 68

J'ai eu le même problème, mais je l'ai résolu en faisant ce qui suit :

try:
   while True:
      for event in pygame.event.get():
         if event.type==QUIT or pygame.key.get_pressed()[K_ESCAPE]:
            pygame.quit()
            break
finally:
   pygame.quit()

3voto

Nik Points 41

L'expression "if event.type==QUIT" génère une erreur de syntaxe. Ce devrait être == pygame.QUIT Le reste de la ligne est également incorrect, mais je ne vois pas comment. Il existe une variante plus propre aquí :

    running = True
    while running:
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
           running = False
    pygame.quit()

0voto

ihightower Points 459

J'ai eu un problème similaire pour savoir pourquoi je ne peux pas fermer pygame Windows et j'ai cherché et je suis tombé sur ceci

Je pense que cela explique tout et bonne idée aussi

vu dans : http://bytes.com/topic/python/answers/802028-pygame-window-not-closing-tut-not-helping

Je pense que le problème est que vous l'exécutez depuis IDLE. On dirait comme si la boucle d'événement de pyGame et celle de Tkinter de Tkinter interfèrent l'une avec l'autre. Si vous exécutez les scripts depuis la ligne de commande ligne de commande, cela fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X