gpt4 book ai didi

python - Pygame 窗口卡住并停止响应,我该如何解决这个问题?

转载 作者:行者123 更新时间:2023-12-01 00:50:37 31 4
gpt4 key购买 nike

我正在创建一个游戏,但我的 GUI 按钮类有问题。没有编译错误,也没有运行时错误。唯一的问题是,运行时它会立即卡住 pygame 窗口。我不知道如何解决这个问题。

我尝试摆弄回调函数(我完全删除了它)以及更新和绘制循环,但似乎没有任何效果。

Python 3.7.0 和 Pygame 1.9.4

按钮类:

import sys
import time
import pygame
pygame.init()

class button:
def __init__(self, txt, location, bg=(255,255,255),fg=(0,0,0),size=(80,30),font_name="Times New Roman",font_size=16):
#bg is the colour of the button
#fg is the colour of the text
#location refers to the center points of the button
self.colour = bg
self.bg = bg
self.fg = fg
self.size = size
self.font = pygame.font.SysFont(font_name,font_size)
self.txt = txt
self.txt_surf = self.font.render(self.txt, 1, self.fg)
self.txt_rect = self.txt_surf.get_rect(center=[s//2 for s in self.size])
self.surface = pygame.surface.Surface(size)
self.rect = self.surface.get_rect(center=location)
def mouseover(self):
self.bg = self.colour
pos = pygame.mouse.get_pos()
if self.rect.collidepoint(pos):
self.bg = (200,200,200)
def draw(self, screen):
self.mouseover()
self.surface.fill(self.bg)
self.surface.blit(self.txt_surf, self.txt_rect)
screen.blit(self.surface, self.rect)

实际更新/绘制循环

import gui
import pygame
import sys
import time
import win32api
pygame.init()

screen = pygame.display.set_mode((400,400))
button1 = gui.button("No", (200,200))
intro = True
while intro:
screen.fill((255,255,255))
button1.draw(screen)
if win32api.GetKeyState(0x01) == -127 or win32api.GetKeyState(0x01) == -128:
if button1.rect.collidepoint(pygame.mouse.get_pos()):
intro = False
pygame.quit()
sys.exit()
pygame.display.flip()
pygame.time.wait(20)

我真的只是希望窗口在运行时停止卡住并真正按下按钮即可工作。它应该做的是当您按下中间的按钮时立即退出应用程序。但实际上并没有这样做。

最佳答案

你必须让pygame通过调用pygame.event.get(或pygame.event.pump)来处理事件队列中的事件,但你应该坚持使用获取)。

否则,队列将填满并且新事件将被丢弃。这包括告诉您的操作系统绘制窗口等的内部事件,因此您的窗口将卡住。

此外,没有理由使用 win32api 来获取键盘的状态(您可以使用 pygame.key.get_pressed 代替),但这是另一个话题了。

关于python - Pygame 窗口卡住并停止响应,我该如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56598804/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com