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

为何Button类is_pressed方法返回None?预期返回2-10的随机整数

为什么Button的is_pressed方法始终返回None?

你的is_pressed方法只有在三个条件全部满足时才会返回2-10的随机整数,其他任何情况都没有显式返回值——Python中函数默认会返回None,这就是self.deleteTime一直为None的原因。

触发返回值的三个必要条件:

  • 鼠标位置命中按钮的矩形区域:self.rect.collidepoint(pos)为True
  • 鼠标左键处于按下状态:pressed[0]为True(pygame中pressed数组索引0对应左键)
  • 按钮的actionID参数等于1:self.id == 1

只要其中一个条件不满足,方法就不会执行return self.newTime语句,最终返回默认的None。

修复方案

给方法添加默认返回逻辑,确保所有分支都有返回值。比如可以返回上一次生成的newTime,或者指定一个默认值:

def is_pressed(self, pos, pressed):
    if self.rect.collidepoint(pos) and pressed[0] and self.id == 1:
        self.newTime = random.randint(2, 10)
        print(self.newTime)
        return self.newTime
    # 不满足条件时,返回已有的newTime或默认值
    return getattr(self, 'newTime', None)

或者如果不需要保留历史值,也可以直接返回一个默认整数:

def is_pressed(self, pos, pressed):
    if self.rect.collidepoint(pos) and pressed[0] and self.id == 1:
        self.newTime = random.randint(2, 10)
        print(self.newTime)
        return self.newTime
    return 0  # 替换为你期望的默认值

额外检查项

  1. 确认mousePos是pygame.mouse.get_pos()获取的窗口内坐标,而非其他转换后的坐标
  2. 确认mousePressed是pygame.mouse.get_pressed()返回的持续状态数组,而非单次点击事件的状态
  3. 检查buttonGrow实例初始化时传入的actionID确实为1

内容的提问来源于stack exchange,提问作者Sadra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:02:54