Tags:
Forums: 

ผมทดลองเขียน 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"))

ขอบคุณครับ

Get latest news from Blognone