我想用Kivy创建一个button小部件,它在单击时使用来自触摸事件的信息,即鼠标位置和用于单击的鼠标按钮。
如果我像这样重新实现on_release或on_press:
from kivy.uix.button import Button
class myBtn(Button):
def on_release(touch=None):
print('Touch:', touch) # Touch: None (always)触摸将始终为None。如果我重新实现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这个版本的问题是,即使我释放鼠标按钮,按钮按下/释放动画仍将保持按下状态,而且该函数被调用两次,而不是只调用一次。
如果我对on_touch_down执行相同的操作,则该函数只执行一次,但单击按钮时,按钮动画不会发生任何变化。
如何恢复MouseMotionEvent以避免我在on_touch_down和on_touch_up中发现的问题
发布于 2015-08-12 02:48:08
如果您想使用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) 但是它仍然会被多次执行。
https://stackoverflow.com/questions/31949675
复制相似问题