[英]Closing Pygame Window
我只是花了相當多的時間找到 pygame 的 64 位安裝以與 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 可能會進入其中一個循環,但即使解決了這個問題,我也非常希望能夠在我想要的時候關閉窗口。
大多數 pygame 教程似乎建議通過調用pygame.quit()
和sys.exit()
退出。 我個人遇到過問題(雖然是在 unix 系統上),但仍然無法正確關閉窗口。 解決方案是在pygame.quit()
之前專門添加pygame.display.quit()
pygame.quit()
。 據我所知,這應該沒有必要,恐怕我不知道為什么這解決了問題,但確實解決了。
如果要在按下窗口按鈕 x 時關閉 pygame,請輸入如下代碼:
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() 關閉該窗口。
不確定,但試試這個 因為在我最后添加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 主循環沒有相互理解。
不過,您的代碼將在命令提示符下運行良好。
這是在 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 中修復
在 IDE (Spyder 3.3.6) 中運行 Python 3.7.4 時遇到了同樣的問題。 就我而言, pygame.quit() 不會完全關閉程序。 盡管如此,添加 quit() 或 exit() 對我有用!
在頂部添加:
import sys
在需要退出的地方添加:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
嘗試使用以下命令:
sys.exit(0)
注意:您需要導入 sys 庫才能使用它。
IDE 會干擾 pygame 運行代碼的方式。 嘗試從命令行或終端運行它。 問題應該會消失。
要回答最初的問題:您必須在中斷主循環后調用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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.