如何在PySimpleGUI中检查输入类型?手机号纯数字校验需求
在PySimpleGUI中限制手机号输入为纯数字的方案
首先要明确:PySimpleGUI的输入元素从始至终都是以字符串类型处理用户输入的,不存在「转换为字符串前」的校验阶段。但我们可以通过实时过滤输入或输入事件校验的方式,从源头保证输入内容仅为数字。
1. 实时过滤输入(推荐)
利用输入元素的input_filter参数,直接过滤掉非数字字符,用户根本无法输入字母、符号等非法内容,从根源解决问题。
示例代码:
import PySimpleGUI as sg # 构建布局 layout = [ [sg.Text('手机号:'), sg.Input(key='-PHONE-', input_filter=lambda x: x if x.isdigit() else '')], [sg.Button('提交'), sg.Button('退出')] ] window = sg.Window('手机号输入校验', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED or event == '退出': break if event == '提交': phone = values['-PHONE-'] # 额外校验手机号长度 if len(phone) == 11: sg.popup(f'有效手机号:{phone}') else: sg.popup('请输入11位标准手机号') window.close()
input_filter接收一个lambda函数,仅保留输入中的数字字符,非数字内容会被直接过滤,输入框内只会显示合法数字。
2. 输入事件触发校验
如果需要在用户输入非法内容时给出提示,可以开启enable_events=True监听输入框的内容变化事件,实时检查并修正输入。
示例代码:
import PySimpleGUI as sg layout = [ [sg.Text('手机号:'), sg.Input(key='-PHONE-', enable_events=True)], [sg.Text('', key='-ERROR-', text_color='red')], # 错误提示位 [sg.Button('提交'), sg.Button('退出')] ] window = sg.Window('手机号输入校验', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED or event == '退出': break # 监听输入框内容变化事件 if event == '-PHONE-': raw_input = values['-PHONE-'] if not raw_input.isdigit(): # 过滤非数字字符并更新输入框 filtered_input = ''.join([c for c in raw_input if c.isdigit()]) window['-PHONE-'].update(filtered_input) window['-ERROR-'].update('⚠️ 只能输入数字!') else: window['-ERROR-'].update('') if event == '提交': phone = values['-PHONE-'] if len(phone) == 11: sg.popup(f'有效手机号:{phone}') else: sg.popup('请输入11位标准手机号') window.close()
内容的提问来源于stack exchange,提问作者cool_guy
相关产品推荐
相关产品推荐

