1999-09-30 03:11:20 -04:00
|
|
|
|
|
|
|
from wxPython.wx import *
|
|
|
|
from wxPython.lib.grids import wxFlexGridSizer
|
|
|
|
|
|
|
|
import string
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
|
|
ALPHA_ONLY = 1
|
|
|
|
DIGIT_ONLY = 2
|
|
|
|
|
|
|
|
class MyValidator(wxPyValidator):
|
|
|
|
def __init__(self, flag=None, pyVar=None):
|
|
|
|
wxPyValidator.__init__(self)
|
|
|
|
self.flag = flag
|
|
|
|
EVT_CHAR(self, self.OnChar)
|
|
|
|
|
|
|
|
def Clone(self):
|
|
|
|
return MyValidator(self.flag)
|
|
|
|
|
|
|
|
def Validate(self, win):
|
|
|
|
print 'validate'
|
|
|
|
tc = wxPyTypeCast(win, "wxTextCtrl")
|
|
|
|
val = tc.GetValue()
|
|
|
|
if self.flag == ALPHA_ONLY:
|
|
|
|
for x in val:
|
|
|
|
if x not in string.letters:
|
|
|
|
return false
|
|
|
|
|
|
|
|
elif self.flag == DIGIT_ONLY:
|
|
|
|
for x in val:
|
|
|
|
if x not in string.digits:
|
|
|
|
return false
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
|
|
|
|
def OnChar(self, event):
|
|
|
|
key = event.KeyCode()
|
|
|
|
if key < WXK_SPACE or key == WXK_DELETE or key > 255:
|
|
|
|
event.Skip()
|
|
|
|
return
|
|
|
|
if self.flag == ALPHA_ONLY and chr(key) in string.letters:
|
|
|
|
event.Skip()
|
|
|
|
return
|
|
|
|
if self.flag == DIGIT_ONLY and chr(key) in string.digits:
|
|
|
|
event.Skip()
|
|
|
|
return
|
|
|
|
|
|
|
|
if not wxValidator_IsSilent():
|
|
|
|
wxBell()
|
|
|
|
|
|
|
|
# Returning without calling even.Skip eats the event before it
|
|
|
|
# gets to the text control
|
|
|
|
return
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
|
|
class TestValidatorPanel(wxPanel):
|
|
|
|
def __init__(self, parent):
|
|
|
|
wxPanel.__init__(self, parent, -1)
|
|
|
|
self.SetAutoLayout(true)
|
|
|
|
VSPACE = 10
|
|
|
|
|
|
|
|
fgs = wxFlexGridSizer(0, 2)
|
|
|
|
|
|
|
|
fgs.Add(1,1);
|
|
|
|
fgs.Add(wxStaticText(self, -1, "These controls have validators that limit\n"
|
|
|
|
"the type of characters that can be entered."))
|
|
|
|
|
|
|
|
fgs.Add(1,VSPACE); fgs.Add(1,VSPACE)
|
|
|
|
|
|
|
|
label = wxStaticText(self, -1, "Alpha Only: ")
|
|
|
|
fgs.Add(label, 0, wxALIGN_RIGHT|wxCENTER)
|
|
|
|
|
1999-09-30 18:26:02 -04:00
|
|
|
fgs.Add(wxTextCtrl(self, -1, "", validator = MyValidator(ALPHA_ONLY)))
|
1999-09-30 03:11:20 -04:00
|
|
|
|
|
|
|
fgs.Add(1,VSPACE); fgs.Add(1,VSPACE)
|
|
|
|
|
|
|
|
label = wxStaticText(self, -1, "Digits Only: ")
|
|
|
|
fgs.Add(label, 0, wxALIGN_RIGHT|wxCENTER)
|
1999-09-30 18:26:02 -04:00
|
|
|
fgs.Add(wxTextCtrl(self, -1, "", validator = MyValidator(DIGIT_ONLY)))
|
1999-09-30 03:11:20 -04:00
|
|
|
|
|
|
|
border = wxBoxSizer()
|
|
|
|
border.Add(fgs, 1, wxGROW|wxALL, 25)
|
|
|
|
self.SetSizer(border)
|
|
|
|
self.Layout()
|
|
|
|
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
|
|
def runTest(frame, nb, log):
|
|
|
|
win = TestValidatorPanel(nb)
|
|
|
|
return win
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
overview = """\
|
|
|
|
wxValidator is the base class for a family of validator classes that mediate between a class of control, and application data.
|
|
|
|
|
|
|
|
A validator has three major roles:
|
|
|
|
|
|
|
|
1. to transfer data from a C++ variable or own storage to and from a control;
|
|
|
|
|
|
|
|
2. to validate data in a control, and show an appropriate error message;
|
|
|
|
|
|
|
|
3. to filter events (such as keystrokes), thereby changing the behaviour of the associated control.
|
|
|
|
|
|
|
|
Validators can be plugged into controls dynamically.
|
|
|
|
|
|
|
|
"""
|