展开全部
wx.EVT_KEY_UP
wx.EVT_KEY_DOWN
通过这两个事件,可以判断用户是否按下键盘,输入了字符。
他们的区别是:
wx.EVT_KEY_UP是键32313133353236313431303231363533e58685e5aeb931333335343437盘按下后再弹起,也就是一次完整的输入,字符被输入到了文本框以后才触发事件。
wx.EVT_KEY_DOWN是键盘按下就触发事件,字符可能还没有输入到文本框里,就被拦截下来。
我试了wx.EVT_KEY_DOWN这个事件,触发事件的时候,按下键盘,抓取用户按下的键值,在输入的字符填到文本框之前,把它转换成大写字符,再填到文本框里,可以做到改变小写为大写。但是有一个问题,就是输入特殊字符的时候,比如shift+2,应该是@,但是抓取到的是2,这样不太好。
所以尝试另外一种方式:首先输入一个字符到文本框里,触发wx.EVT_KEY_UP事件,然后获取文本框里刚刚输入的这个字符,如果是小写字母,就转换成大写的,如果是其他字符,则不做处理。
虽然这个方法不是很简便,但是能达到效果。
下面是代码,调试过没问题:
import wx
import time
def lower_to_upper(event):
end_pos = text_box.GetInsertionPoint()#获取插入点的位置
if end_pos <=0 :return#插入点为0代表是文本框的起始位置
start_pos = end_pos -1#插入点前一个位置
text_box.SetSelection(start_pos,end_pos)#选取刚输入的字符
char_value=text_box.GetStringSelection()#获取字符的值
if 97<=ord(char_value)<=122:#小写字母的ascii 码范围是97到122
upper_case = char_value.upper()#转换成大写
text_box.Remove(start_pos,end_pos)#删除小写字母
time.sleep(.5)#等待0.5秒,为的是能看到删除的动作,可以删掉这一行
text_box.WriteText(upper_case)#填入大写字母
else:
text_box.SetInsertionPoint(end_pos)#如果是其他字符,直接设置插入点,等待输入
app = wx.App()
win = wx.Frame(None,title = "Test",size = (200,200))
win.SetBackgroundColour(wx.BLACK)
win.Show()
text_box = wx.TextCtrl(win,pos = (0,0))
text_box.Bind(wx.EVT_KEY_UP,lower_to_upper) #文本框绑定事件,调用相应的函数
app.MainLoop()
复制代码即可运行,截图如下:
希望能帮到你,有疑问请追问!