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

KivyMD中max_text_length未限制输入,求3位整数严格输入方案

解决KivyMD MDTextField严格限制3位整数输入的问题

MDTextField的max_text_length属性仅提供视觉提示(文本变红),不会阻止超出长度的输入;默认的input_filter: 'int'仅限制输入整数,不控制长度。要实现只能输入3位整数(最多3位,输入过程中自动截断超出部分),同时可验证是否达到最少3位,可通过以下方法实现:

方法:自定义输入过滤器

自定义输入过滤器函数,同时实现整数限制和长度截断,替代默认的int过滤器:

完整代码示例

from kivy.lang import Builder
from kivymd.app import MDApp

def three_digit_int_filter(text, from_undo):
    # 过滤非数字字符,并截断到最多3位
    filtered_text = ''.join([char for char in text if char.isdigit()])[:3]
    return filtered_text

KV = '''
Screen:
    MDTextField:
        mode: "round"
        id: place
        input_filter: app.three_digit_int_filter
        hint_text: "3 Digit Number"
        valign: 'center'
        icon_right: "apps"
        size_hint_x: None
        width: 250
        font_size: 18
        pos_hint: {"center_x": 0.5}
        helper_text_mode: "on_error"
    
    MDRaisedButton:
        text: "提交"
        pos_hint: {"center_x": 0.5, "center_y": 0.4}
        on_press: app.validate_input()
'''

class TestApp(MDApp):
    three_digit_int_filter = three_digit_int_filter

    def validate_input(self):
        # 验证输入是否为3位整数
        input_text = self.root.ids.place.text
        if len(input_text) != 3:
            self.root.ids.place.error = True
            self.root.ids.place.helper_text = "请输入完整的3位数字"
        else:
            self.root.ids.place.error = False
            self.root.ids.place.helper_text = ""
            # 处理正确输入的逻辑
            print(f"有效输入:{input_text}")

    def build(self):
        return Builder.load_string(KV)

if __name__ == "__main__":
    TestApp().run()

代码说明

  1. 自定义过滤器:three_digit_int_filter函数会实时过滤非数字字符,并将输入文本截断到最多3位,彻底阻止超出长度的输入。
  2. 提交验证:点击按钮触发validate_input方法,检查输入长度是否为3位,不符合则显示错误提示。
  3. 移除原代码中的max_text_length,因为自定义过滤器已实现长度限制,无需重复设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:21:06