wxpython输入框_wxpython 怎么建立个使输入的字母变为大写文本框

展开全部

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()

复制代码即可运行,截图如下:

希望能帮到你,有疑问请追问!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值