我怎样才能使可滑动的 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_down
、on_touch_move
和on_touch_up
。要启用长按/按住行为,一种方法是在 on_touch_down
事件中安排一个具有时间阈值的动作,超过该时间阈值将通过同一事件触发该动作。再次获得滑动行为,您可以根据需要在 on_touch_move
事件和其他人的事件中实现逻辑。您还可以通过检查 collide_point
、collide_widget
等来限制触摸事件进一步传播
您可以 track/identify 任何 Button
及其 id
或通过它传递一些参数。
I was looking for pre built package for this, but I maybe using ...
是的,有一些。 KivyMD 是基于 Kivy
开发的类似 Google 的 Material 设计的项目之一。
我想制作具有类似可滑动 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_down
、on_touch_move
和on_touch_up
。要启用长按/按住行为,一种方法是在 on_touch_down
事件中安排一个具有时间阈值的动作,超过该时间阈值将通过同一事件触发该动作。再次获得滑动行为,您可以根据需要在 on_touch_move
事件和其他人的事件中实现逻辑。您还可以通过检查 collide_point
、collide_widget
等来限制触摸事件进一步传播
您可以 track/identify 任何 Button
及其 id
或通过它传递一些参数。
I was looking for pre built package for this, but I maybe using ...
是的,有一些。 KivyMD 是基于 Kivy
开发的类似 Google 的 Material 设计的项目之一。