[英]How to update the on_touch_move and on_touch_down methods of a Widget in kivy
[英]on_touch_down shouldnt update counter when on_touch_move - kivy
我正在運行on_touch_down和on_touch_move,並且需要在移動完成或着陸完成時更新計數器。 但是我不想在我們剛觸摸移動時更新觸地。但是默認情況下即使它只是一個touch_move它仍然會加1觸地,我認為這是因為在移動事件中檢測到第一次觸地,但是有什么辦法解決這個問題:
下面是一個示例代碼。
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class JB(BoxLayout):
def __init__(self, **kwargs):
super(JB, self).__init__(**kwargs)
self.touch_move_count = 0
self.touch_down_count = 0
self.touch_move_Label = Label()
self.touch_down_Label = Label()
self.update_count()
self.add_widget(self.touch_down_Label)
self.add_widget(self.touch_move_Label)
def update_count(self):
self.touch_down_Label.text = "Touch Down Count : %s"%str(self.touch_down_count)
self.touch_move_Label.text = "Touch Move Count : %s"%str(self.touch_move_count)
def on_touch_down(self, touch):
self.touch_down_count += 1
print "down", self.touch_down_count
self.update_count()
def on_touch_move(self, touch):
self.touch_move_count += 1
print "moved", self.touch_move_count
self.update_count()
class MyJBApp(App):
def build(self):
self.parent = JB()
return self.parent
if __name__ == '__main__':
MyJBApp().run()
在移動之前,您仍然需要按下按鈕-會始終發送一次按下事件,因為此時應用程序不知道您是否要移動。 如果您想知道觸摸是否發生而沒有移動,那么也可以使用修飾:
def on_touch_down(self, touch):
self.is_touch_down = True
def on_touch_up(self, touch):
if self.is_touch_down:
self.touch_down_count += 1
print "down", self.touch_down_count
self.update_count()
self.is_touch_down = False
def on_touch_move(self, touch):
self.is_touch_down = False
self.touch_move_count += 1
print "moved", self.touch_move_count
self.update_count()
您還可以通過將接收到的觸摸保存在on_touch_down
,然后在on_touch_up
中檢查位置是否在某個公差范圍內(例如4px之類),來做一些更復雜的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.