1

不知道为什么在释放按钮时会触发 on_touch_up。其他两个事件 on_touch_down 和 on_touch_move 不会被触发。

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


class MyPaintWidget(Widget):

    def on_touch_down(self, touch):
        print "on_touch_down"

    def on_touch_move(self, touch):
        print "on_touch_move"

    def on_touch_up(self, touch):
        print "on_touch_up"


class MyPaintApp(App):

    def build(self):
        parent = Widget()

        painter = MyPaintWidget()
        btn = Button(text='Click Me')

        parent.add_widget(painter)
        parent.add_widget(btn)

        return parent

if __name__ == '__main__':
    MyPaintApp().run()
4

1 回答 1

3

您已经重载了 MyPainterWidget 的 up、down 和 move 方法,它们在单击小部件时按定义执行。

uix.Button 没有 on_touch_up 方法,因此事件会向上传播到小部件树。您可以通过更改顺序来进一步调查

parent.add_widget(painter)
parent.add_widget(btn)

parent.add_widget(btn)
parent.add_widget(painter)

我们现在看到“on_touch_up”和“on_touch_down”都打印到控制台,即使单击uix.Button,而不仅仅是“on_touch_up”。

这些是 kivy 如何处理事件的各个方面,可以在此处找到详细信息

于 2012-12-11T17:07:06.173 回答