【问题标题】:How can you change the KivyMD file explorer in python so that a double click opens a directory如何在 python 中更改 KivyMD 文件资源管理器,以便双击打开一个目录
【发布时间】:2020-05-26 10:51:40
【问题描述】:

所以我正在为学校的一个项目开发文件资源管理器,并且我正在使用 KivyMD 中内置的文件资源管理器小部件。问题是小部件的当前代码使它成为一个目录,当您在图标视图中单击它一次时,它会打开一个目录。我需要它是单击选择一个目录并双击然后打开它。我尝试检查双重触摸,但它似乎不起作用。反正有没有让这个工作。我在 python 或 kivy 方面真的没有那么先进。

kivyMD文件浏览器源码:https://raw.githubusercontent.com/HeaTTheatR/KivyMD/master/kivymd/uix/filemanager.py

'''

非常感谢:)

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    这是一个我认为你想要的黑客。在 .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()),该时间略长于两次点按之间允许的最长时间。

    如果再次单击发生的速度快到足以成为双击,则取消计划的单击处理,并启动双击处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2010-09-08
      • 2018-02-13
      • 2020-12-05
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多