如何在Python Flet中验证TextField仅允许输入数字
在Flet TextField中实现仅保留数字输入(移除非数字字符)
问题分析
当前验证逻辑在检测到非数字输入时会清空整个TextField,不符合需求——我们需要自动过滤掉输入中的非数字字符,仅保留数字内容。
修改后的验证函数
替换原validarNumeros函数为以下逻辑,通过字符过滤实现仅保留数字:
def validarNumeros(self, campo, pagee): # 从输入中提取所有数字字符 solo_numeros = ''.join([caracter for caracter in campo.value if caracter.isdigit()]) # 仅当内容有变化时更新,避免重复刷新页面 if solo_numeros != campo.value: self.cedula.value = solo_numeros pagee.update()
绑定TextField的事件
创建TextField时,将验证函数绑定到on_change事件,确保用户每输入一个字符就触发验证:
self.cedula = TextField( label="Cedula", hint_text="Ingresar Cedula", border_radius=30, border_color="#820000", width=300, height=60, on_change=lambda e: self.validarNumeros(e.control, e.page) )
逻辑说明
- 使用列表推导式遍历输入字符串的每个字符,筛选出仅数字字符并拼接成新字符串。
- 加入内容对比判断,只有当过滤后的内容与原输入不同时才更新组件,减少不必要的页面刷新。
- 绑定
on_change事件后,用户每输入/删除一个字符都会触发验证,实时过滤非数字内容。
内容的提问来源于stack exchange,提问作者Diego Marin
相关产品推荐
相关产品推荐

