ฉันกำลังพยายามเขียนเครื่องมือตรวจสอบความถูกต้องตัวแรกของฉันสำหรับ wx.TextCtrl
ตาม การตอบสนองต่อคำถามอื่นใน SO ซึ่งควรทำดังต่อไปนี้:
ควรพิมพ์ตัวอักษรทั้งหมดเป็นตัวอักษรพิมพ์ใหญ่ และช่องข้อความควรมีเฉพาะตัวอักษรพิมพ์ใหญ่และตัวเลขเท่านั้น
อย่างไรก็ตาม ความพยายามของฉันล้มเหลวในสองประเด็น:
เมื่อฉันเปลี่ยนเทมเพลต (นำมาจากการตอบกลับที่เชื่อมโยง) ไม่มีอะไรถูกเพิ่มลงในช่องข้อความ
ฉันไม่สามารถเปลี่ยนอักษรตัวเล็กเป็นตัวพิมพ์ใหญ่ได้
นี่คือความพยายามของฉัน:
import wx
import string
########################################################################
class CharValidator(wx.PyValidator):
''' Validates data as it is entered into the text controls. '''
#----------------------------------------------------------------------
def __init__(self, flag):
wx.PyValidator.__init__(self)
self.flag = flag
self.Bind(wx.EVT_CHAR, self.OnChar)
#----------------------------------------------------------------------
def Clone(self):
'''Required Validator method'''
return CharValidator(self.flag)
#----------------------------------------------------------------------
def Validate(self, win):
return True
#----------------------------------------------------------------------
def TransferToWindow(self):
return True
#----------------------------------------------------------------------
def TransferFromWindow(self):
return True
#----------------------------------------------------------------------
def OnChar(self, event):
keycode = int(event.GetKeyCode())
if keycode < 256:
if keycode > 96 & keycode < 123:
keycode = keycode - 32
#print keycode
key = chr(keycode)
#print key
return
event.Skip()
########################################################################
class ValidationDemo(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, wx.ID_ANY,
"Text Validation Tutorial")
panel = wx.Panel(self)
textOne = wx.TextCtrl(panel, validator=CharValidator('no-alpha'))
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(textOne, 0, wx.ALL, 5)
panel.SetSizer(sizer)
# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = ValidationDemo()
frame.Show()
app.MainLoop()