WxPython TextCtrl zu VERSALIEN verwandeln
Frage
Ich war auf der Suche nach einer Möglichkeit, Text zu verwandeln trat in das textctrl Feld in Großbuchstaben. Ich habe versucht, einen Validator und die Umwandlung der Wert des Schlüssels Ereignisobjekts auf den Großbuchstaben char-Wert mit ‚ord‘ verwenden jedoch konnte ich keine ‚Set‘ Methoden finden. Ich kann die Ereignisklasse Variable direkt als Klassenvariablen in Python sind nie wirklich privat zugreifen kann, aber im Problem, die genaue Informationen zu finden, ich brauche das zu tun.
Wie auch immer dies scheint wie ein allzu komplizierter Ansatz. Hat jemand irgendwelche Vorschläge. Bin ich etwas fehlt offensichtlich?
Lösung
Versuchen Sie dies.
import wx
class UpperTextCtrl(wx.TextCtrl):
def __init__(self, *args, **kwargs):
super(UpperTextCtrl, self).__init__(*args, **kwargs)
self.Bind(wx.EVT_TEXT, self.on_text)
def on_text(self, event):
event.Skip()
selection = self.GetSelection()
value = self.GetValue().upper()
self.ChangeValue(value)
self.SetSelection(*selection)
class Frame(wx.Frame):
def __init__(self):
super(Frame, self).__init__(None, -1, 'Uppercase Text Control')
panel = wx.Panel(self, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
text = UpperTextCtrl(panel, -1, style=wx.TE_MULTILINE)
# change the font
font = text.GetFont()
font.SetPointSize(12)
text.SetFont(font)
sizer.Add(text, 1, wx.EXPAND|wx.ALL, 10)
panel.SetSizer(sizer)
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = Frame()
frame.Show()
app.MainLoop()
Andere Tipps
Mit dieser Lösung überprüfen.
import wx
import string
class UpperTextCtrl(wx.TextCtrl):
def __init__(self, *args, **kwargs):
super(UpperTextCtrl, self).__init__(*args, **kwargs)
self.Bind(wx.EVT_CHAR, self.on_char)
def on_char(self, event):
key=event.GetKeyCode()
text_ctrl=event.GetEventObject()
if chr(key) in string.letters:
text_ctrl.AppendText(chr(key).upper())
return
event.Skip()
class Frame(wx.Frame):
def __init__(self):
super(Frame, self).__init__(None, -1, 'Uppercase Text Control')
panel = wx.Panel(self, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
text = UpperTextCtrl(panel, -1, style=wx.TE_MULTILINE)
# change the font
font = text.GetFont()
font.SetPointSize(12)
text.SetFont(font)
sizer.Add(text, 1, wx.EXPAND|wx.ALL, 10)
panel.SetSizer(sizer)
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = Frame()
frame.Show()
app.MainLoop()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow