在画布上收到的补漆事件。不知道为什么

时间:2012-11-08 14:42:56

标签: kivy

不确定释放按钮时为什么会触发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()

1 个答案:

答案 0 :(得分:3)

你已经重载了MyPainterWidget的向上,向下和移动方法,并且在点击小部件时按照定义执行。

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如何处理事件的方面,the details of which can be found here