容器中的validate()控件在第一次无效后停止

2024-09-27 04:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在验证用户输入控件,如文本框和下拉列表。我的问题是,验证容器。验证())在找到第一个无效控件后停止。我希望它在返回之前验证所有控件。我想一次向用户显示所有无效控件,而不是逐个显示。有办法吗?你知道吗

(使用wx.WS \u EX \u递归验证\u将传播到子级,但前提是之前没有其他控件无效)

编辑: 我没有为每个控件覆盖Validate(),而是决定使用一个单独的函数,它迭代所有子控件并验证它们。 注意:默认情况下OnOK事件不会调用此函数。为此,事件处理程序必须是反弹的。你知道吗

def ValidateRecursively(control):
    '''Validate this control and its children recursively''' 
    validator = control.GetValidator()
    # no validator -> valid
    isValid = validator.Validate(control) if validator else True
    for childControl in control.GetChildren():
        # only validate enabled controls
        if childControl.IsEnabled():
            isValid &= ValidateRecursively(childControl)
    return isValid

Tags: 函数用户列表if事件validatevalidator容器
1条回答
网友
1楼 · 发布于 2024-09-27 04:21:58

要做到这一点,您需要重写对话框中的Validate(),自己遍历所有控件,而不必像基类实现那样在第一个无效控件处停止。你知道吗

不幸的是,您可能需要复制code here,因为无法重用它。好的一面是,您可以像使用它一样使用它,只需更改return false行即可记住错误并在末尾返回它。你知道吗

相关问题 更多 >

    热门问题