]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/Validator.py
   5 #---------------------------------------------------------------------- 
  10 class MyValidator(wx
.PyValidator
): 
  11     def __init__(self
, flag
=None, pyVar
=None): 
  12         wx
.PyValidator
.__init
__(self
) 
  14         self
.Bind(wx
.EVT_CHAR
, self
.OnChar
) 
  17         return MyValidator(self
.flag
) 
  19     def Validate(self
, win
): 
  23         if self
.flag 
== ALPHA_ONLY
: 
  25                 if x 
not in string
.letters
: 
  28         elif self
.flag 
== DIGIT_ONLY
: 
  30                 if x 
not in string
.digits
: 
  36     def OnChar(self
, event
): 
  39         if key 
< wx
.WXK_SPACE 
or key 
== wx
.WXK_DELETE 
or key 
> 255: 
  43         if self
.flag 
== ALPHA_ONLY 
and chr(key
) in string
.letters
: 
  47         if self
.flag 
== DIGIT_ONLY 
and chr(key
) in string
.digits
: 
  51         if not wx
.Validator_IsSilent(): 
  54         # Returning without calling even.Skip eats the event before it 
  55         # gets to the text control 
  58 #---------------------------------------------------------------------- 
  60 class TestValidatorPanel(wx
.Panel
): 
  61     def __init__(self
, parent
): 
  62         wx
.Panel
.__init
__(self
, parent
, -1) 
  63         self
.SetAutoLayout(True) 
  66         fgs 
= wx
.FlexGridSizer(0, 2) 
  69         fgs
.Add(wx
.StaticText(self
, -1, "These controls have validators that limit\n" 
  70                              "the type of characters that can be entered.")) 
  72         fgs
.Add((1,VSPACE
)); fgs
.Add((1,VSPACE
)) 
  74         label 
= wx
.StaticText(self
, -1, "Alpha Only: ") 
  75         fgs
.Add(label
, 0, wx
.ALIGN_RIGHT|wx
.CENTER
) 
  77         fgs
.Add(wx
.TextCtrl(self
, -1, "", validator 
= MyValidator(ALPHA_ONLY
))) 
  79         fgs
.Add((1,VSPACE
)); fgs
.Add((1,VSPACE
)) 
  81         label 
= wx
.StaticText(self
, -1, "Digits Only: ") 
  82         fgs
.Add(label
, 0, wx
.ALIGN_RIGHT|wx
.CENTER
) 
  83         fgs
.Add(wx
.TextCtrl(self
, -1, "", validator 
= MyValidator(DIGIT_ONLY
))) 
  85         fgs
.Add((1,VSPACE
)); fgs
.Add((1,VSPACE
)) 
  86         fgs
.Add((1,VSPACE
)); fgs
.Add((1,VSPACE
)) 
  88         b 
= wx
.Button(self
, -1, "Test Dialog Validation") 
  89         self
.Bind(wx
.EVT_BUTTON
, self
.OnDoDialog
, b
) 
  92         border 
= wx
.BoxSizer() 
  93         border
.Add(fgs
, 1, wx
.GROW|wx
.ALL
, 25) 
  97     def OnDoDialog(self
, evt
): 
  98         dlg 
= TestValidateDialog(self
) 
 103 #---------------------------------------------------------------------- 
 105 class TextObjectValidator(wx
.PyValidator
): 
 106      """ This validator is used to ensure that the user has entered something 
 107          into the text object editor dialog's text field. 
 110          """ Standard constructor. 
 112          wx
.PyValidator
.__init
__(self
) 
 119              Note that every validator must implement the Clone() method. 
 121          return TextObjectValidator() 
 124      def Validate(self
, win
): 
 125          """ Validate the contents of the given text control. 
 127          textCtrl 
= self
.GetWindow() 
 128          text 
= textCtrl
.GetValue() 
 131              wx
.MessageBox("A text object must contain some text!", "Error") 
 132              textCtrl
.SetBackgroundColour("pink") 
 137              textCtrl
.SetBackgroundColour( 
 138                  wx
.SystemSettings_GetColour(wx
.SYS_COLOUR_WINDOW
)) 
 143      def TransferToWindow(self
): 
 144          """ Transfer data from validator to window. 
 146              The default implementation returns False, indicating that an error 
 147              occurred.  We simply return True, as we don't do any data transfer. 
 149          return True # Prevent wxDialog from complaining. 
 152      def TransferFromWindow(self
): 
 153          """ Transfer data from window to validator. 
 155              The default implementation returns False, indicating that an error 
 156              occurred.  We simply return True, as we don't do any data transfer. 
 158          return True # Prevent wxDialog from complaining. 
 160 #---------------------------------------------------------------------- 
 162 class TestValidateDialog(wx
.Dialog
): 
 163     def __init__(self
, parent
): 
 164         wx
.Dialog
.__init
__(self
, parent
, -1, "Validated Dialog") 
 166         self
.SetAutoLayout(True) 
 169         fgs 
= wx
.FlexGridSizer(0, 2) 
 172         fgs
.Add(wx
.StaticText(self
, -1, 
 173                              "These controls must have text entered into them.  Each\n" 
 174                              "one has a validator that is checked when the Okay\n" 
 175                              "button is clicked.")) 
 177         fgs
.Add((1,VSPACE
)); fgs
.Add((1,VSPACE
)) 
 179         label 
= wx
.StaticText(self
, -1, "First: ") 
 180         fgs
.Add(label
, 0, wx
.ALIGN_RIGHT|wx
.CENTER
) 
 182         fgs
.Add(wx
.TextCtrl(self
, -1, "", validator 
= TextObjectValidator())) 
 184         fgs
.Add((1,VSPACE
)); fgs
.Add((1,VSPACE
)) 
 186         label 
= wx
.StaticText(self
, -1, "Second: ") 
 187         fgs
.Add(label
, 0, wx
.ALIGN_RIGHT|wx
.CENTER
) 
 188         fgs
.Add(wx
.TextCtrl(self
, -1, "", validator 
= TextObjectValidator())) 
 191         buttons 
= wx
.StdDialogButtonSizer() #wx.BoxSizer(wx.HORIZONTAL) 
 192         b 
= wx
.Button(self
, wx
.ID_OK
, "OK") 
 195         buttons
.AddButton(wx
.Button(self
, wx
.ID_CANCEL
, "Cancel")) 
 198         border 
= wx
.BoxSizer(wx
.VERTICAL
) 
 199         border
.Add(fgs
, 1, wx
.GROW|wx
.ALL
, 25) 
 201         self
.SetSizer(border
) 
 206 #---------------------------------------------------------------------- 
 208 def runTest(frame
, nb
, log
): 
 209     win 
= TestValidatorPanel(nb
) 
 212 #---------------------------------------------------------------------- 
 219 wx.Validator is the base class for a family of validator classes that mediate  
 220 between a class of control, and application data. 
 222 <p>A validator has three major roles: 
 225 <li>to transfer data from a C++ variable or own storage to and from a control; 
 226 <li>to validate data in a control, and show an appropriate error message; 
 227 <li>to filter events (such as keystrokes), thereby changing the behaviour of the associated control. 
 229 <p>Validators can be plugged into controls dynamically. 
 236 if __name__ 
== '__main__': 
 239     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])