簡體   English   中英

關閉 Pygame 窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM