Witam
Chcę przejąć kontrolę nad backspace
i del
(poprzez przejęcie funkcji do_backspace
) w TextInput
, ale napotkałem dziwne i niezrozumiałe dla mnie zachowanie, gdy używam klawisza delete
. Gdy backspace
nie przesuwa kursora to delete
już tak i to w prawo. Mimo, że znak nie jest usuwany. Walczę z tym wywołując do_cursor_movement('cursor_left')
, ale też używam śledzenia kursora bind
i dodatkowy ruch wywołuje niepotrzebną akcję bo jednak ten kursor rusza się niepotrzebnie.
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from kivy.app import runTouchApp
from kivy.clock import Clock
from kivy.uix.textinput import TextInput
from kivy.uix.floatlayout import FloatLayout
def crsFoll(*d):
print('Cursor')
return None
class MyTextInput(TextInput):
def do_backspace(self, mode = None):
if mode == 'del':
print('delete')
self.do_cursor_movement('cursor_left')
else: print('backspace')
return None
koLay = FloatLayout(size_hint = (1,1))
sLn = 'dfgfdfdgfd gf gfd g'
koTxt = MyTextInput(size_hint = (1,.2), text = sLn, font_size = 16, multiline = False)
koTxt.focus = True
koLay.add_widget(koTxt)
Clock.schedule_once(lambda _: setattr(koTxt, 'cursor',(5,0)), .02 )
Clock.schedule_once(lambda _: koTxt.bind(cursor=crsFoll), .05)
runTouchApp(koLay)
quit()
Czy to jakiś błąd czy niezrozumiały dla mnie "feature"?
Pozdrawiam
Radek Głębicki