Ich versuche, meinen ersten Validator für wx.TextCtrl
basierend auf this response to another question on SO zu schreiben, die folgenden tun sollen:Wie konvertiert man die alphabetische Eingabe in wx.TextCtrl in alle Großbuchstaben?
Alle Buchstaben als captial Buchstaben gedruckt werden sollen und das Textfeld nur captial Buchstaben und Zahlen enthält.
jedoch nicht meine Versuche in zweierlei Hinsicht:
Wenn ich meine Vorlage zu ändern (aus dem linked response) nichts wird das Textfeld hinzugefügt.
Ich kann kleine Buchstaben nicht in Großbuchstaben ändern.
Hier ist mein Versuch:
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()
Sie sollten die Antwort auswählen, die Ihre gestellte Frage und Ihre Anforderungen beantwortet, nicht Ihre eigenen Nachworte. In jedem Fall adressiert Ihre Antwort nicht Ihre eigenen veröffentlichten Anforderungen: Erstens validiert sie nichts, konvertiert nur in Großbuchstaben, was konvertiert werden kann, und zweitens entspricht sie nicht Ihrer hervorgehobenen Zeile "das Textfeld sollte nur Großbuchstaben enthalten und Zahlen ". Also schlage ich vor, dass du dich selbst runterzählst :-). – joaquin
Vielleicht wurde meine Frage missverstanden. Ich brauche keinen Validator. Ich möchte nur, dass alle Briefe in Großbuchstaben geschrieben sind. Und Sie haben Recht, das Verwerfen von Nicht-Ziffern oder Zeichen ist nicht implementiert. Das wollte ich erreichen. Zumindest beantwortet es die wörtliche Frage (d. H. Überschrift). Ich möchte nicht unhöflich sein und deine Antwort wirklich schätzen. Aber das ist die Antwort, die ich gefunden habe, und ich postete sie und akzeptierte sie als Referenz (und verdiente keine Punkte dafür). Ok für Sie? – Henrik