kivy 中绑定按钮的 On_Release 事件不起作用 - 运行 on_touch_down

paa*_*tra 1 python kivy

我正在尝试在小部件上添加一个按钮并将该按钮绑定到一个函数。与此同时,我正在on_touch_down举办一个活动。

但是,当我按下按钮时,它不会调用该功能;相反,它调用on_touch_down事件。

我怎样才能解决这个问题?

import kivy
kivy.require('1.0.8')

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button

class a(Widget):

    def on_touch_down(self, touch):
        print("touch x is ", touch.x)
        print("touch y is ", touch.y)

    def update(self,dt):
        print("updated")

class mainApp(App):

    def build(self):
        print("Hi, I am build function")
        parent = a()

        self.Startbtn = Button(text='Start')
        parent.add_widget(self.Startbtn)
        self.Startbtn.bind(on_release=self.Loop1)

         #Clock.schedule_interval(parent.update, 10.0/1000 )
        return parent

    def Loop1(self,dt):
        print("Hi, this is Loop function")
        self.v=1


if __name__ == '__main__':
    mainApp().run()
Run Code Online (Sandbox Code Playgroud)

1bi*_*fMe 6

尝试这个:

class a(Widget):
    def on_touch_down(self, touch):
        print "touch x is ",touch.x
        print "touch y is ",touch.y
        # add this line:
        super(a, self).on_touch_down(touch) 
Run Code Online (Sandbox Code Playgroud)

on_touch... 方法首先在触摸事件链中执行,覆盖它,你打破了这个链,所以只需添加 super() 继续。希望它有所帮助。

编辑:结果,而不是 super(),你可以只返回 True继续事件树

  • 触摸沿着小部件树向下传播,首先被传递到根小部件,然后让每个小部件将触摸传递给其子部件。您可以通过重新定义 on_touch_down 来覆盖此行为,这是通常发生触摸传递的地方。 (2认同)