Закрытие окна 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()