OpenSesame
Rapunzel Code Editor
DataMatrix
Support forum
Python Tutorials
MindProbe
Supported by

验证表单输入

要验证表单,请将带有 validator 关键字的函数传递给 Form()。在下面的示例中,以这种方式使用了 my_form_validator()。验证器函数不应期望任何参数,并应返回一个 bool 以指示表单是否验证。如果表单未验证,将不显示错误消息,但表单仍会保持打开状态。

此外,您可以验证(或筛选)TextInput 小部件的输入,以排除某些字符作为输入。要这样做,请使用 key_filter 关键字将函数传递给 TextInput()。在下面的示例中,以这种方式使用了 filter_digits()。键筛选器函数应接受一个参数,该参数对应于单个按键,应返回一个 bool 以表示键是否被接受为输入。

def my_form_validator():
    """检查性别和年龄字段是否都已填写"""
    return gender != 'no' and age != ''


def filter_digits(ch):
    """仅允许数字字符作为输入"""
    return ch in '0123456789'


# 定义所有小部件
button_ok = Button(text='Ok')
label_gender= Label('您的性别')
checkbox_male = Checkbox(text='男', group='gender', var='gender')
checkbox_female = Checkbox(text='女', group='gender', var='gender')
label_age = Label('您的年龄')
# 指定一个键筛选器,以便只接受数字作为文本输入
input_age = TextInput(stub='此处输入年龄 ...', var='age', key_filter=filter_digits)
# 构建表单。指定一个验证器函数以确保表单完成。
my_form = Form(validator=my_form_validator, rows=[1,1,1], cols=[1,1,1])
my_form.set_widget(label_gender, (0, 0))
my_form.set_widget(checkbox_male, (1, 0))
my_form.set_widget(checkbox_female, (2, 0))
my_form.set_widget(label_age, (0, 1))
my_form.set_widget(input_age, (1, 1), colspan=2)
my_form.set_widget(button_ok, (1, 2))
my_form._exec()
Supported by