我想用Kivy创建一个按钮小部件,它在点击时使用触摸事件中的信息,即鼠标位置和用于点击的鼠标按钮。
如果我像这样重新实施on_release
或on_press
:
from kivy.uix.button import Button
class myBtn(Button):
def on_release(touch=None):
print('Touch:', touch) # Touch: None (always)
触摸始终为无。如果我重新实施on_touch_up
或on_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_down
和on_touch_up
时遇到的问题?
答案 0 :(得分:0)
如果您想使用on_release
或on_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_down
或on_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)
但它仍会被执行多次。