Закрытие окна Pygame

Я потратил немало времени на поиск 64-битной установки pygame для использования с python 3.3, (здесь), и теперь я пытаясь сделать окно. Однако, хотя окно открывается отлично, оно не закрывается, когда оно нажимает кнопку x. На самом деле, я должен закрыть IDLE, чтобы закрыть окно. Я запускаю 64-битную версию Win 7. Вот мой код:

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

Когда я добавляю

time.sleep(5)
pygame.quit()

Он все еще не закрывается. Мое единственное предположение было бы в том, что pygame.quit может войти в один из циклов, но даже если бы это было разрешено, я бы очень хотел, чтобы я мог закрыть окно, когда захочу.

Ответ 1

Большинство учебных пособий по Pygame, кажется, предлагают выход, вызывая pygame.quit(), а затем sys.exit(). Я лично столкнулся с проблемами (был в системе unix), где это все еще не закрывало окно должным образом. Решением было добавить pygame.display.quit() специально до pygame.quit(). Это не должно быть необходимо, насколько я могу судить, и, боюсь, я не знаю, почему это решило проблему, но это произошло.

Ответ 2

Не уверен, но попробуйте это, потому что вы код отлично работает в моей системе после того, как я добавлю pygame.quit() в конец

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()

Возможно, потому, что, поскольку Idle сделан на Tkinter, и поэтому основной цикл Tkinter и Pygame не имеют взаимопонимания.
Ваш код будет работать очень хорошо в командной строке, хотя.

Ответ 3

если вы хотите закрыть Pygame при нажатии кнопки окна x, поместите код так:

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

Мы ставим exit() после pygame.quit(), потому что pygame.quit() делает выход системы, а exit() закрывает это окно.

Ответ 4

Это был последний код, который работал для меня на OSX, в то же время поддерживая ядро на Jupyter. РЕДАКТИРОВАТЬ - он все еще иногда вылетает ядро :-(

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

Также необходимо понизить версию ipython, чтобы избавиться от некоторых магических сообщений с псевдонимами, используя:

conda install ipython=7.2.0

очевидно, эта проблема должна быть исправлена в ipython 7.6.0

Ответ 5

попробуйте использовать следующую команду:

sys.exit(0)

Примечание: вам нужно будет импортировать библиотеку sys для ее использования.

Ответ 6

IDE мешает тому, как pygame запускает код. Попробуйте запустить его из командной строки или терминала. Проблема должна исчезнуть.

Ответ 7

Чтобы ответить на исходный вопрос: Вы должны вызвать pygame.quit() после разрыва основного цикла. Одно изящное решение состоит в следующем:

def run():
    pygame.init()
    while True:
        # ...
        for event in pygame.event.get():
            # Handle other events
            if event.type == pygame.QUIT:
                return pygame.quit()