Kivy:从Button on_release / on_press访问MouseMotionEvent信息

时间:2015-08-11 18:48:08

标签: python button touch kivy mousemotionevent

我想用Kivy创建一个按钮小部件,它在点击时使用触摸事件中的信息,即鼠标位置和用于点击的鼠标按钮。

如果我像这样重新实施on_releaseon_press

from kivy.uix.button import Button

class myBtn(Button):
    def on_release(touch=None):
        print('Touch:', touch) # Touch: None (always)

触摸始终为无。如果我重新实施on_touch_upon_touch_down,我可以访问触摸信息:

from kivy.uix.button import Button

class myBtn(Button):
    def on_touch_up(touch=None):
        print('Touch:', touch)
        # Touch: <MouseMotionEvent spos=(..., ...) pos=(..., ...)

        print('Button:', touch.button) # Button: left

此版本的问题在于,即使在我松开​​鼠标按钮后按钮按下/释放动画也会保持按下状态,此功能也会被调用2次而不是一次。

如果我对on_touch_down执行相同操作,则该函数仅执行一次,但单击时按钮动画完全不会更改。

如何恢复MouseMotionEvent,避免我在on_touch_downon_touch_up时遇到的问题?

1 个答案:

答案 0 :(得分:0)

如果您想使用on_releaseon_press,可以像这样访问MouseMotionEvent

from kivy.uix.button import Button

class myBtn(Button):
    def on_release():
        print('Touch:', self.last_touch)
        print('Button:', self.last_touch.button)

如果您想使用on_touch_downon_touch_up,您只需要确保调用super()实现:

from kivy.uix.button import Button

class myBtn(Button):
    def on_touch_up(touch):
        print('Touch:', touch)
        print('Button:', touch.button)    
        super(myBtn, self).on_touch_up(touch) 

但它仍会被执行多次。