Wxpython TextCtrl تحويل إلى أحرف كبيرة
سؤال
كنت أبحث عن طريقة لتحويل النص الذي تم إدخاله في حقل TextCtrl إلى أحرف كبيرة. حاولت استخدام Validator وتحويل قيمة كائن الحدث الرئيسي إلى قيمة Char حرف الأحرف الكبيرة باستخدام "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