Вот хак, который, я думаю, делает то, что вам нужно. Вверху вашего основного файла .py
добавьте следующие строки (должны быть перед любым другим импортом):
from kivy.config import Config
# calculate a time delta that is slightly longer than the maximum time for a double tap
dtt = (int(Config.get('postproc', 'double_tap_time')) + 50) / 1000.0
Затем используйте следующий MyMDFileManager
вместо MDFileManager
:
class MyMDFileManager(MDFileManager):
def __init__(self, **kwargs):
super(MyMDFileManager, self).__init__(**kwargs)
self.single_tap_trigger = None
self.last_touch = None
def select_dir_or_file(self, path):
if self.last_touch is None or not self.last_touch.is_double_tap:
# schedule single tap process to happen after a possible second tap of a double tap
self.single_tap_trigger = Clock.schedule_once(partial(self.do_single_tap, path), dtt)
elif self.last_touch.is_double_tap:
if self.single_tap_trigger:
# this is a double tap, so cancel single tap scheduled process
self.single_tap_trigger.cancel()
self.single_tap_trigger = None
# do double tap proessing
self.do_double_tap(path)
else:
# just clean up
if self.single_tap_trigger:
self.single_tap_trigger.cancel()
self.single_tap_trigger = None
def do_double_tap(self, path):
print('double tap\n')
super(MyMDFileManager, self).select_dir_or_file(path)
def do_single_tap(self, path, dt):
print('single tap\n')
self.select_path(path)
def on_touch_down(self, touch):
self.last_touch = touch
return super(MyMDFileManager, self).on_touch_down(touch
Когда получен одиночный щелчок, обычная обработка одного щелчка задерживается (с использованием Clock.schedule_once()
) на время, немного большее, чем максимальное время, разрешенное между касаниями двойного касания.
Если другой щелчок происходит достаточно быстро, чтобы быть двойным касанием, то запланированная обработка одиночного касания отменяется и запускается обработка двойного касания.