Pygame自定义Button类draw方法返回值失效问题求助
Pygame按钮点击失效问题修复方案
核心问题排查&修复
- 红按钮判断逻辑错误:你的
Button.draw()方法返回的是布尔值True/False,但你判断坏球按钮点击的代码写的是if Bad_ball.draw(Window)=="t",字符串"t"和布尔值True永远不相等,导致红按钮点击永远不会触发后续逻辑。
修复:修改为if Bad_ball.draw(Window):即可。 - draw方法重复调用导致状态被重置:你的代码在主循环里先调用了一次
Good_ball.draw()、Bad_ball.draw()做点击判断,之后在drawwin()函数里又调用了一次这两个按钮的draw方法。draw方法里包含self.clicked状态的重置逻辑,重复调用会直接清空第一次调用时生成的点击状态,导致点击判断失效。
修复:删除drawwin()函数里的两行按钮draw调用,只保留主循环里的一次draw调用即可,或者修改逻辑让draw仅做绘制,点击判断单独抽成方法,避免状态冲突。 - 缩进错误导致刷新逻辑失效:
drawwin()函数中的pygame.display.update()行缩进错误,不属于该函数的代码块,运行时会直接抛出语法错误,界面无法正常刷新。
修复:调整缩进,让该行和drawwin()内的其他代码保持同缩进级别。 - 未定义函数调用报错:主循环最后调用了
checkpress()函数,但你没有定义该函数,运行时会直接抛出NameError导致程序崩溃。
修复:要么删除这行调用,要么补充实现checkpress()函数。
修复后核心逻辑参考
# 修正后的drawwin函数 def drawwin(): Window.fill((202,241,208)) # 删掉这里的按钮draw调用,主循环里已经调用过了 pygame.display.update() def Main(): run = True while run: # 这里调用draw同时完成点击判断+按钮绘制 if Good_ball.draw(Window): print("green clicked") if Bad_ball.draw(Window): print("red clicked") for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.quit() sys.exit() drawwin() # 删掉未定义的checkpress调用,或者补充实现
内容的提问来源于stack exchange,提问作者MangoBirb_99
相关产品推荐
相关产品推荐

