sys.exit和pygame.quit和os._exit0无法关闭pygame显示窗口

问题描述

sys.exit()和pygame.quit()通常对我有用。我目前正在尝试使用类和类属性。我的猜测是,由于在类中如何创建屏幕对象,因此无法关闭屏幕对象?

我不会打印打印语句-我检查了它是否正在注册quit事件。

请帮助!


import pygame
import os,sys,random,math



class Game():
    active = True
    cell_size = 20
    max_cell_number = 30
    welcome = True
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode(size = (Game.cell_size*Game.max_cell_number,Game.cell_size*Game.max_cell_number))
        self.clock = pygame.time.Clock()
    class Background():
        def __init__(self):
            image1 = pygame.image.load('/assets/image1.png').convert()
            image2 = pygame.image.load('/assets/image2.png').convert()
            image3 = pygame.image.load('/assets/image3.png').convert()
            image4 = pygame.image.load('/assets/image4.png').convert()
            image5 = pygame.image.load('/assets/image5.png').convert()
            self.images = [image1,image2,image3,image4,image5]
        def generate_background(self):
            image_number = random.randint(0,4)
            image = self.images[image_number]
            return image

    class Cards():
        def __init__(self):
            pass
        def show(self,welcome):
            if welcome:
                self.WelcomeScreen()
            else:
                self.EndScreen()

    class WelcomeScreen():
        def __init__(self):
            image = self.Background()
            image = image.generate_background
            self.screen.blit(image,(0,0))
game = Game()

while True:
    if game.active:
        for event in pygame.event.get():
            if event == pygame.QUIT:
                print("quit")
                pygame.quit()
                sys.exit(0)


    else:
        for event in pygame.event.get():
            if event == pygame.QUIT:
                pygame.quit()
                sys.exit()

        game.Cards.show(Game.welcome)


    game.clock.tick(120)
    pygame.display.update()

解决方法

您需要将事件的类型pygame.QUIT进行比较,因为原始事件将始终只是Event类的一个实例。

已更正的while循环:


while True:
    if game.active:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                print("quit")
                pygame.quit()
                sys.exit(0)
    else:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        game.Cards.show(Game.welcome)

    game.clock.tick(120)
    pygame.display.update()