如何在Flet的TextField中接收int/float类型的数字输入?
Flet TextField获取数字输入的解决办法
一、给TextField设置数字键盘
Flet的TextField可以通过keyboard_type参数指定输入键盘类型,设置为ft.KeyboardType.NUMBER后,移动端会直接弹出数字键盘,桌面端也会引导用户优先输入数字:
quantity_input = ft.TextField(label="你想要添加多少家公司?", keyboard_type=ft.KeyboardType.NUMBER)
(注:桌面端仍能手动输入非数字,所以必须配合后续的类型校验)
二、将输入字符串转为数字并处理错误
TextField的value属性返回的永远是字符串,需要手动转换为int或float类型,同时要处理用户输入非数字的情况,避免程序崩溃。
修正后的完整代码
import flet as ft def main(page: ft.Page): # 初始化数量输入框,指定数字键盘 quantity_input = ft.TextField(label="你想要添加多少家公司?", keyboard_type=ft.KeyboardType.NUMBER) list_companies = [] def btn_empresas(e): try: # 去除输入前后空格,转为整数 quantity = int(quantity_input.value.strip()) if quantity <= 0: page.add(ft.Text("请输入大于0的数字", color=ft.colors.RED)) return # 循环创建每家公司的输入项 for position in range(1, quantity + 1): company = { "value": ft.TextField(label=f"第{position}家公司的水库价值:", keyboard_type=ft.KeyboardType.NUMBER), "index": ft.TextField(label=f"第{position}家公司的索引:", keyboard_type=ft.KeyboardType.NUMBER), "volume": ft.TextField(label=f"第{position}家公司的容量:", keyboard_type=ft.KeyboardType.NUMBER) } list_companies.append(company) page.add(ft.Text(f"已添加第{position}家公司")) # 将输入框添加到页面供用户填写 page.add(company["value"], company["index"], company["volume"]) except ValueError: # 输入非有效数字时给出提示 page.add(ft.Text("请输入有效的数字!", color=ft.colors.RED)) # 将输入框和按钮添加到页面 page.add(quantity_input, ft.ElevatedButton("确认数量并添加公司", on_click=btn_empresas)) if __name__ == "__main__": ft.app(target=main)
关键注意事项
- 不能直接用TextField对象做数值运算:原代码中直接拿
quantity(TextField对象)参与循环,这是错误的,必须先获取其value属性并转换为数字类型。 - 必须做异常处理:用户可能输入字母、符号等非数字内容,用
try-except捕获ValueError,可以避免程序崩溃并给出友好提示。 - 避免变量名冲突:别用
list这类Python内置类型名当变量名,会覆盖原有功能,换成list_companies这类自定义名称更稳妥。
内容的提问来源于stack exchange,提问作者Natã Sales
相关产品推荐
相关产品推荐

