如何在python中更改KivyMD文件资源管理器,以便双击打开一个目录

2024-04-25 09:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在为学校的一个项目开发一个文件浏览器,我正在使用KivyMD中内置的文件浏览器小部件。问题是小部件的当前代码使其在图标视图中单击一次时打开一个目录。我需要它是一个单一的点击选择一个目录,然后双击打开它。我试着检查双触,但似乎不起作用。无论如何都有办法让它工作。我在python或kivy方面真的没有那么先进

kivyMD文件资源管理器的源代码:https://raw.githubusercontent.com/HeaTTheatR/KivyMD/master/kivymd/uix/filemanager.py

'''

非常感谢:)


Tags: 文件项目代码目录视图部件浏览器内置
1条回答
网友
1楼 · 发布于 2024-04-25 09:27:48

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

如果再次单击的速度足够快,以致于双击,则取消计划的单次点击处理,并启动双击处理

相关问题 更多 >