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

时间:2016-01-15 10:38:44

标签: python c++ wxpython wxwidgets

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

(使用wx.WS_EX_VALIDATE_RECURSIVELY将传播给子节点,但前提是没有其他控件无效)

修改 我没有为每个控件覆盖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

1 个答案:

答案 0 :(得分:0)

要执行此操作,您需要在对话框中覆盖Validate()并自行迭代所有控件而不停止第一个无效控件,就像基类实现一样。

不幸的是,您可能需要复制code here,因为无法重复使用它。从好的方面来说,您可以使用它,只需更改return false行即可记住错误,并在最后返回。