You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:45:10