user1389804
user1389804

Reputation: 11

on_touch_up event recieved by canvas. Not sure why

Not sure why on_touch_up is being fired when the button is released. The other two events, on_touch_down and on_touch_move are not fired.

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()

Upvotes: 1

Views: 1211

Answers (1)

Adam
Adam

Reputation: 4580

You've overloaded the up, down and move methods of MyPainterWidget and they execute as defined when clicking on the widget.

A uix.Button doesn't have a on_touch_up method so the event propagates up the widget tree. You can investigate this a little further by changing the order of

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

to

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

We now see that the both "on_touch_up" and "on_touch_down" are printed to the console, even when clicking the uix.Button, rather than just "on_touch_up".

These are facets of how kivy handles events, the details of which can be found here

Upvotes: 3

Related Questions