这是一个我认为你想要的黑客。在 .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()),该时间略长于两次点按之间允许的最长时间。
如果再次单击发生的速度快到足以成为双击,则取消计划的单击处理,并启动双击处理。