python — wx: validate () контролирует в контейнере остановки после первого недействительного

я проверяю пользовательские элементы управления вводом, такие как текстовые поля и выпадающие списки. У меня проблема в том, что проверка (container.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

0

Решение

Для этого вам нужно переопределить Validate() в вашем диалоговом окне и обойдите все элементы управления самостоятельно, не останавливаясь на первом неверном элементе, как это делает реализация базового класса.

К сожалению, вам, вероятно, потребуется продублировать код здесь так как нет возможности использовать его повторно. На яркой стороне, вы можете использовать его почти так же, как просто с изменением return false строки, чтобы запомнить ошибку и вернуть ее в конце.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]