ผมทดลองเขียน Validator สำหรับใช้ใน Dialog ครับ
แต่ method อื่นๆนอกจาก Clone() ไม่ถูกเรียกเลย ขนาด Copy มาจากตัวอย่างที่่ใช้ได้ก็ยังไม่ได้
ใช้ Python 2.5.1 กับ wxPython 2.8.10.1 ครับ
class DataXferValidator(wx.PyValidator):
def __init__(self, data, key):
wx.PyValidator.__init__(self)
self.data = data
self.key = key
#print self.data, self.key
def Clone(self):
print "Clone"
return DataXferValidator(self.data, self.key)
def Validate(self, win):
print "Validate"
return True
def TransferToWindow(self): #Call on dialog open
print "TransferToWindow"
textCtrl = self.GetWindow()
textCtrl.SetValue(self.data.get(self.key, ""))
return True
def TransferFromWindow(self): #Call on dialog close
print "TransferFromWindow"
textCtrl = self.GetWindow()
self.data[self.key] = textCtrl.GetValue()
return True
class LoginDlg(wx.Dialog):
data = logindlg_settings.dialogData
def init(self, parent, id, _data):
wx.Dialog.init(self, parent, id, self.data["title"], size=(420,450))
P = wx.Panel(self)
#Create controls
mainSizer = wx.BoxSizer(wx.VERTICAL)
#Create header image
bmp = wx.Image("images\login_01.png").ConvertToBitmap()
sb = wx.StaticBitmap(P, -1, bmp)
print _data, "First"
#Create user data
nameLabel = wx.StaticText(P, -1, self.data["nameLabel"])
passLabel = wx.StaticText(P, -1, self.data["passLabel"])
userName = wx.TextCtrl(P, validator=DataXferValidator( _data, "username"))
password = wx.TextCtrl(P, validator=DataXferValidator( _data, "password"))
ขอบคุณครับ