WXPYTHON TEXTCTRL 대문자로 변환합니다
문제
TextCtrl 필드에 입력 한 텍스트를 대문자로 변환하는 방법을 찾고있었습니다. 유효성 검사기를 사용하고 키 이벤트 객체의 값을 'Ord'를 사용하여 대문자 문자로 변환했지만 '세트'메소드를 찾을 수 없었습니다. Python의 클래스 변수가 실제로 개인이 아니기 때문에 이벤트 클래스 변수에 직접 액세스 할 수 있습니다.
어쨌든 이것은 지나치게 복잡한 접근 방식처럼 보입니다. 다른 사람에게는 제안이 있습니까? 내가 분명한 것을 놓치고 있습니까?
해결책
이 시도.
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()
다른 팁
이 솔루션을 확인하십시오.
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()
제휴하지 않습니다 StackOverflow