web-dev-qa-db-fra.com

Fermeture de la fenêtre Pygame

Je viens de passer assez de temps à trouver une installation 64 bits de pygame à utiliser avec python 3.3 ( ici ) et je tente maintenant de créer une fenêtre. Cependant, bien que la fenêtre s’ouvre correctement, elle ne se ferme pas lorsque vous appuyez sur le bouton x. En fait, je dois fermer IDLE pour fermer la fenêtre. J'utilise une version 64 bits de Win 7. Voici mon code:

import pygame
import time
(width, height) = (300, 200)
screen = pygame.display.set_mode((width, height))
pygame.display.flip()
pygame.display.set_caption("Hello World")
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

Quand j'ajoute

time.sleep(5)
pygame.quit()

Il ne ferme toujours pas. Ma seule hypothèse serait que pygame.quit puisse entrer dans l'une des boucles, mais même si cela était résolu, je préférerais grandement pouvoir fermer la fenêtre quand je le souhaite. 

8
KnightOfNi

La plupart des tutoriels sur Pygame semblent suggérer de quitter en appelant pygame.quit(), puis sys.exit(). J'ai personnellement rencontré des problèmes (c'était sur un système Unix cependant) où cela ne fermait toujours pas correctement la fenêtre. La solution consistait à ajouter pygame.display.quit() spécifiquement avant pygame.quit(). Autant que je sache, cela ne devrait pas être nécessaire, et j'ai bien peur de ne pas savoir pourquoi cela a résolu le problème, mais c'est ce qui s'est passé.

14
Erikun

Pas sûr mais essayez ceci Parce que votre code fonctionne correctement sur mon système après avoir ajouté pygame.quit() à la fin

import pygame
import time
(width, height) = (300, 200)
screen = pygame.display.set_mode((width, height))
pygame.display.flip()
pygame.display.set_caption("Hello World")
running = True
try:
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
    pygame.quit()
except SystemExit:
    pygame.quit()

C'est peut-être parce que Idle est créé sur Tkinter et que la boucle principale de Tkinter et de Pygame n'a donc pas de compréhension mutuelle.
Votre code fonctionnera très bien à l’invite de commande.

4
adil

si vous voulez faire pygame fermer lorsque le bouton de la fenêtre x appuyez sur mettre le code comme celui-ci

from sys import exit
while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()

pourquoi mettre exit () après pygame.quit (), cause pygame.quit () oblige system exit et exit () à fermer cette fenêtre

2
jerryalfs

essayez d'utiliser la commande suivante:

sys.exit(0)

remarque: Vous devez importer la bibliothèque sys pour pouvoir l’utiliser. 

0
OphirBack

IDE interfère avec la façon dont pygame exécute le code. Essayez de l'exécuter à partir de la ligne de commande ou du terminal. Le problème devrait disparaître.

0
NinjasAtWork