我怎样才能使可滑动的 Kivy Button 也具有单击、长按或双击功能?

How can I swipeable Kivy Button that can also have single, long or double press functionality?

我想制作具有类似可滑动 Buttons(或其他用途的填充小部件)的 Kivy 移动应用程序。除此之外,我还想从同一个 Button 获得第二种类型的输入。例如 Gmail 移动应用程序使用此功能:

我有这个代码:

main.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button

class ItemList(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.orientation = "vertical"
        self.item_list = []
        for i in range(10):
            self.item_list.append(Button(text=str(i),
                                    on_release=lambda x, this_item=i: print(this_item)))
            self.add_widget(self.item_list[-1])

class MainApp(App):
    pass

MainApp().run()

main.kv

ItemList:

我希望程序能够理解列表中的 按钮被按下并且是按下“键入”轻扫还是 single/double/long 按下(三个中的任何一个都可以)并且执行相应的方法。

我正在为此寻找预构建的包,但我可能使用了错误的关键字,因为我在列表中找不到适合这种类型的 Buttons/widgets。

以下解释或建议是基于您是Kivy的新手(看起来)。

据我了解,到现在为止,在 kivy 中,您可能无法期待一些即用型组件。但这不是缺点,实际上是让开发人员选择、实现自己的一种非常有效的方法。有许多方法可以对 CustomWidget 进行编程,例如 Button。您可以更改外观、触摸反馈、纹理等,仅举几例。

I want the program to be able to understand witch button on the list is pressed and is the press "type" a swipe or single/double/long press (any one of three will do) and excecute corresponding method.

要获得自己的触摸行为(behavior),除了默认的mixin ButtonBehavior,你可以用三个触摸事件on_touch_downon_touch_moveon_touch_up。要启用长按/按住行为,一种方法是在 on_touch_down 事件中安排一个具有时间阈值的动作,超过该时间阈值将通过同一事件触发该动作。再次获得滑动行为,您可以根据需要在 on_touch_move 事件和其他人的事件中实现逻辑。您还可以通过检查 collide_pointcollide_widget 等来限制触摸事件进一步传播

您可以 track/identify 任何 Button 及其 id 或通过它传递一些参数。

I was looking for pre built package for this, but I maybe using ...

是的,有一些。 KivyMD 是基于 Kivy 开发的类似 Google 的 Material 设计的项目之一。