2013-11-03 29 views
0

我正在嘗試爲表單上的輸入創建驗證器。我已經瞭解到,在wxPython中,由於缺乏對標準wxTextValidator等的支持,有必要繼承wx.Validator。驗證wxPython中的數據

我的問題是:

  • 該字符串如何有效遏制符合以簡單規則(無正則表達式請)

    acceptableChars = ['a', 'b', ...]

    all(char in acceptableChars for char in string)

    是這樣的效率?以及如何幹淨地指定所有字母數字或數字?或者是否有任何準備好的課程或功能?

  • 將覆蓋Validate方法只在輸入數據時保持約束 - 我的意思是它會阻止用戶輸入數字到字母數字TextCtrl或僅在關閉模態diagog時才檢查?

回答

1

Validate()被稱爲只有當對話即將在默認情況下關閉,但是當控件失去焦點也可以自己調用它。最後,如果您的控件根本不接受某些字符,您還可以攔截wxEVT_CHAR事件以防止它們被輸入。我確實相信wxPython演示展示瞭如何做到這一點。

1
"12345".isdigit() # True 
"123.45".isdigit() # False 
"abcde".isalpha() # True 
"abcde1".isalpha() # False 
"abcde12345".isalnum() # True 
"!!??".isalnum() # False 

其他情況下,你必須使用你的代碼

acceptableChars = "ab5-?" # or acceptableChars = ['a', 'b', '5', '-', '?'] 

all(char in acceptableChars for char in string) 

def isValid(string, acceptableChars): 
    return all(char in acceptableChars for char in string)