python输入三行_kivy python:检测文本输入中的退格

解决方案

覆盖

do_backspace()

文本输入中的方法。如果文本是“/”,则返回true,表示我们已经使用了backspace,不希望它进一步传播。

最后,如果文本不是“/”,我们使用super()调用原始事件并返回结果。这允许do_backspace事件传播继续正常进行。

详情请参阅示例。

do_backspace(from_undo=False, mode='bkspc')

从当前光标位置执行退格操作。这个动作

可能做几件事:

删除当前选择(如果可用)。

删除上一个字符并将光标移回。

如果我们在开始就什么都不做。

例子

主.py

from kivy.app import App

from kivy.uix.textinput import TextInput

import re

class DateInput(TextInput):

def do_backspace(self, from_undo=False, mode='bkspc'):

print(from_undo, mode)

if len(self.text) >= 1:

if self.text[-1] == "/":

self.text = self.text[:-1]

return True # we have consumed the backspace and donât want it to propagate any further

return super(DateInput, self).do_backspace(from_undo, mode)

#filter for date formatting which works well aside from backspacing

pat = re.compile('[^0-9]')

def insert_text(self, substring, from_undo=False):

pat = self.pat

if len(substring) > 1:

substring = re.sub(pat, '', (self.text + substring))

self.text = ''

slen = len(substring)

if slen == 2:

s = substring[:2] + '/'

elif slen == 3:

s = substring[:2] + '/' + substring[2:]

elif slen == 4:

s = substring[:2] + '/' + substring[2:] + '/'

else:

s = substring[:2] + '/' + substring[2:4] + '/' + substring[4:8]

elif len(self.text) > 9:

s = ''

elif len(self.text) == 1:

s = re.sub(pat, '', substring)

if s != '':

s = s + '/'

elif len(self.text) == 4:

s = re.sub(pat, '', substring)

if s != '':

s = s + '/'

else:

s = re.sub(pat, '', substring)

return super(DateInput, self).insert_text(s, from_undo=from_undo)

class TestApp(App):

def build(self):

return DateInput()

if __name__ == "__main__":

TestApp().run()

输出

iq1sh.png

p5Pw6.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值