Kivy:按钮状态是否有触摸状态?

时间:2014-09-21 23:08:25

标签: python-2.7 kivy

对于触摸事件,我知道触摸屏幕时会触发on_touch_down,触摸位置发生变化时触发on_touch_move,触摸释放时触发on_touch_up但触摸激活时需要调用函数,包括当触摸位置没有改变时。例如,使用按钮我只是将一个功能绑定到按钮的状态,这样当按钮状态为" down"该函数被调用。我可以用触摸事件做类似的事情吗?

使用button.state:

的示例
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from kivy.clock import Clock

Builder.load_string("""

<ButtonR>
    size:self.size
    pos:self.pos

<RootWidget>
    button1:button1
    button2:button2

    ButtonR:
        id:button1
        text:"press button to move"
        size_hint:0.2,0.2
        pos:0,0

    ButtonR:
        id:button2
        text:"press screen and move"
        size_hint:0.2,0.2        
        pos:0,200

""")

class ButtonR(Button):
    def move(self):
        self.center_x+=1

class RootWidget(FloatLayout):
    button1=ObjectProperty(None)
    button2=ObjectProperty(None)

    def update(self,dt):
        #Bottom button only moves if clicked on
        if self.button1.state=="down":
            self.button1.move()

    def on_touch_move(self,touch):
        #Top button moves only when touch event moves position
        self.button2.move()

class MyApp(App):

    def build(self):
        app=RootWidget()
        Clock.schedule_interval(app.update,1.0/60)
        return app

if __name__=="__main__":
    MyApp().run()

1 个答案:

答案 0 :(得分:0)

  

但我需要在触摸激活时调用一个函数,包括触摸位置不变时

当您收到on_touch_down时触摸会变为活动状态,并且在为同一触摸调用on_touch_up时该触摸不再处于活动状态。无论你想要什么逻辑,你都可以通过这些来打电话。

  

当按钮状态为“向下”时,该函数被称为

我不知道你的意思 - 如果你只是想在触摸发生时调用一个函数,请使用on_touch_down

如果您想以触摸存在的方式调用函数,只需存储当前触摸列表(您可以在获得on_touch_down时添加该列表,并在获得on_touch_up时删除并随心所欲地使用它。