(Python)在线程中关闭pygame.display
我正在尝试创建一个线程,该线程将在我的程序的后台连续运行,并检查用户是否按下了窗口右上角的X按钮,如果用户确实按下了该按钮,则退出该程序。这样,无论发生什么,用户都可以随时关闭程序 我不知道线是怎么工作的,所以请容忍我。下面是我的代码的简化版本,但它不起作用:(Python)在线程中关闭pygame.display,python,multithreading,pygame,Python,Multithreading,Pygame,我正在尝试创建一个线程,该线程将在我的程序的后台连续运行,并检查用户是否按下了窗口右上角的X按钮,如果用户确实按下了该按钮,则退出该程序。这样,无论发生什么,用户都可以随时关闭程序 我不知道线是怎么工作的,所以请容忍我。下面是我的代码的简化版本,但它不起作用: from threading import Thread import pygame, sys def checkForQuit(): while True: for event in pygame.event.
from threading import Thread
import pygame, sys
def checkForQuit():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.time.wait(100) # 100ms
if __name__ == "__main__":
screen = pygame.display.set_mode((300, 300))
quitThread = Thread(target = checkForQuit)
quitThread.start()
我的代码现在的问题是,当我运行它时,程序无法判断是否按下了关闭按钮,窗口会一直挂起,直到崩溃。我不确定是否有更简单的方法来完成我的任务
我试图寻找一个类似的问题,但我也不知道我在寻找什么。感谢您的帮助:)通常您可以通过这种方式关闭pygame。它不应该需要线程。由于pygame循环中的pygame事件始终处于选中状态,因此当用户关闭其窗口时,pygame.QUIT事件将始终执行
import pygame, sys
def main():
pygame.init()
screen = pygame.display.set_mode((300, 300))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if __name__ == "__main__":
main()
如果你想用一个线程来关闭它,你可以这样尝试
import threading
import pygame
import sys
def main():
pygame.init()
screen = pygame.display.set_mode((300, 300))
global running
running = True
def programCheck():
while True:
if not running:
sys.exit(0)
t = threading.Thread(target=programCheck)
t.start()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
running = False
if __name__ == "__main__":
main()
我认为这是一个XY问题。为什么要在另一个线程上检查退出事件?顺便说一下,必须在主线程上调用pygame.event.get(),否则它将无法正常工作。