You need to enable JavaScript to run this app. Pygame中如何将输入框的回车输入值存储为供其他函数调用的变量
优惠活动
大模型
产品
解决方案
定价
更多

Pygame中如何将输入框的回车输入值存储为供其他函数调用的变量

数字输入框优化实现

核心改动点

  • 为InputBox类新增公开属性stored_value,专门存储回车提交后的有效数字,初始值设为None,标识尚未接收到有效输入,外部函数可直接读取该属性
  • 补充输入合法性过滤逻辑,从根源上阻止非数字字符被录入输入框,匹配“仅输入数字”的定位
  • 重构回车键按下的处理逻辑:不再执行打印后直接清空文本,而是先校验当前文本格式是否合规,校验通过后转换为数值类型存入stored_value,再执行清空操作
  • 完整保留原有交互逻辑(点击激活/失活、退格删除、输入框宽度自适应、绘制渲染),不改动原有类的初始化、事件绑定、更新、绘制流程

优化后完整代码

class InputBox:
    def __init__(self, x, y, w, h, text=''):
        self.rect = pg.Rect(x, y, w, h)
        self.color = COLOR_INACTIVE
        self.text = text
        self.txt_surface = FONT.render(text, True, self.color)
        self.active = False
        # 新增:存储提交后的有效数字
        self.stored_value = None

    def handle_event(self, event):
        if event.type == pg.MOUSEBUTTONDOWN:
            # 点击切换输入框激活状态
            if self.rect.collidepoint(event.pos):
                self.active = not self.active
            else:
                self.active = False
            self.color = COLOR_ACTIVE if self.active else COLOR_INACTIVE
        
        if event.type == pg.KEYDOWN:
            if self.active:
                if event.key == pg.K_RETURN:
                    # 校验输入内容是否为有效数字
                    if self.text.strip():
                        try:
                            # 若仅需整数,可将float替换为int
                            self.stored_value = float(self.text)
                            # 如需保留输入内容不被清空,删除下方这行即可
                            self.text = ''
                        except ValueError:
                            # 格式非法时不更新存储值
                            pass
                elif event.key == pg.K_BACKSPACE:
                    self.text = self.text[:-1]
                else:
                    # 输入校验:仅允许数字录入,如需支持小数可放开小数点限制
                    current_char = event.unicode
                    if current_char.isdigit():
                        self.text += current_char
                # 更新文本渲染面
                self.txt_surface = FONT.render(self.text, True, self.color)

    def update(self):
        width = max(200, self.txt_surface.get_width()+10)
        self.rect.w = width

    def draw(self, screen):
        screen.blit(self.txt_surface, (self.rect.x+5, self.rect.y+5))
        pg.draw.rect(screen, self.color, self.rect, 2)

外部读取方式

其他功能函数无需绑定输入事件逻辑,直接通过InputBox实例的stored_value属性读取即可:

def main():
    # ...原有初始化逻辑
    number_input = InputBox(100, 100, 140, 32)
    input_boxes.append(number_input)

    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True
            for box in input_boxes:
                box.handle_event(event)
        
        # 其他业务函数读取输入值示例
        def get_committed_number():
            # 先判断是否已有有效提交值
            if number_input.stored_value is not None:
                return number_input.stored_value
            return None # 未提交时的默认返回值

        for box in input_boxes:
            box.update()
        screen.fill((30, 30, 30))
        for box in input_boxes:
            box.draw(screen)
        pg.display.flip()
        clock.tick(30)
  • 若需要支持小数输入,可将输入校验逻辑调整为:允许录入单个小数点,即当current_char为.且当前self.text中未包含.时,将该字符追加到文本中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 02:06:02