当我们释放对 kivy 开关项目的点击时,如何触发一个事件?

How to fire one event when we release the click on a kivy switch item?

目标:当我点击然后释放开关小部件上的点击时,它会在释放时触发我一个事件。

问题:我使用了 on_touch_down() 开关方法但是:

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout


KV = '''
MyGridLayout:
    Switch:
        id: switch_ecs
        on_touch_up:
            root.on_switch("ecs")
'''

class MyGridLayout(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def on_switch(self,element_id):
        print(self.ids["switch_" + element_id].active)

class MyApp(MDApp):
    def build(self):
        self.screen = Builder.load_string(KV)
        return self.screen



if __name__ == '__main__':
    MyApp().run()

Kivy 有一些模糊的逻辑,导致 touch up 事件被分派两次到某些小部件(如 ButtonsSwitches)。您的代码的修复方法是为您的 on_switch() 方法使用不同的触发器。您可以使用:

    on_touch_down:
        root.on_switch("ecs")

或:

    on_active:
        root.on_switch("ecs")