Pygame计算器开发:点击按钮后数字无法持续显示的问题求解
解决Pygame计算器点击按钮后数字持续显示的问题
你的问题出在绘制逻辑和事件逻辑绑定过紧:当前代码仅在鼠标按下(MOUSEBUTTONDOWN事件触发)的那一瞬间绘制数字,但游戏主循环每帧都会用screen.fill("black")清空屏幕,松开鼠标后没有对应事件触发,数字自然不会被重新绘制,所以消失。
解决方法是用一个状态变量记录是否需要显示数字,把事件处理和绘制逻辑分开:事件只负责改变状态,绘制部分根据状态决定是否渲染数字。
修改后的完整代码:
import pygame from sys import exit pygame.init() screen = pygame.display.set_mode((600,800)) pygame.display.set_caption("Calculator") clock = pygame.time.Clock() font1 = pygame.font.Font("c:/Users/oreni/OneDrive/Masaüstü/sprites/minecraft.ttf", 100) one = 1 # 添加状态变量,标记是否显示数字1 show_one = False one_main = font1.render(str(one), False, "black") one_main_r = one_main.get_rect(center = (75,100)) one_button = pygame.Surface((142.5,142.5)) one_button.fill("white") one_button_r = one_button.get_rect(topleft = (0,160)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 把事件判断移到事件循环内部,避免event变量溢出 if event.type == pygame.MOUSEBUTTONDOWN: if one_button_r.collidepoint(event.pos): # 点击按钮时切换状态(如果需要反复点击显示/隐藏,就用show_one = not show_one) show_one = True screen.fill("black") screen.blit(one_button,one_button_r) # 根据状态变量决定是否绘制数字,而不是依赖单次事件 if show_one: screen.blit(one_main,one_main_r) pygame.display.update() clock.tick(60)
关键修改点:
- 添加
show_one状态变量,初始为False,点击按钮时设为True;如果需要支持点击切换显示/隐藏,可改为show_one = not show_one。 - 将
MOUSEBUTTONDOWN的判断移到事件循环内部,避免主循环中引用event变量时出现未定义问题(原代码中如果没有事件触发,event变量可能不存在)。 - 绘制数字的逻辑从事件处理中分离出来,放在主循环的绘制阶段,每帧都会根据
show_one的状态决定是否渲染数字。
这样修改后,点击按钮后show_one保持True,每帧都会重新绘制数字,就能实现持续显示的效果了。
内容的提问来源于stack exchange,提问作者Motzy0446
相关产品推荐
相关产品推荐

