이 솔루션을 확인하십시오.
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()
아주 좋습니다. 나는 텍스트 선택을 바꾸는 것을 고려했다. 그러나 나는 그것이 조금 느릴지도 모른다라고 생각했다, 그렇지 않다. 어쨌든 타자를 치는 사람에게는 눈에 띄지 않습니다. 아주 고맙습니다. 실제로 내 목적을 위해 컨트롤을 서브 클래 싱하면 제어 할 수있는 아이디어가 더 많아졌습니다. 다시 한 번 감사드립니다. –
재귀 버그를 피하려면 SetValue 대신 ChangeValue를 사용해야합니다. (SetValue는 EVT_TEXT 이벤트를 다시 생성합니다.) 코드를 편집했습니다. 나는 아이맥에서 눈치 채지 못했지만 윈도우에서는 눈치 챘다. – FogleBird
너도 알다시피. 나는 내 자신에 대해 이것을 알아낼 수 있어야한다고 생각한다. 그러나 나는 올바른 길을 찾지 못한다. 이 글꼴을 변경하고 동일한 스타일을 유지하는 기능을 추가 할 수 있기를 원할 때, ontext upper() 루틴을 통과 할 때까지 잘 작동합니다. 필자는 매우 특별한 결과로 글꼴을 설정하려고했습니다. 어떤 아이디어? 필자는 이것을 약간의 시간 동안 연구 해왔다. –