2014-09-21 2 views
0

Для событий касания я знаю, что есть on_touch_down, который срабатывает, когда вы касаетесь экрана, on_touch_move, который срабатывает при изменении положения касания, и on_touch_up, который срабатывает при отпускании касания, но мне нужна функция для вызова, когда сенсорный режим активен, в том числе когда положение касания не изменяется. Например, с помощью кнопок я просто привязываю функцию к состоянию кнопки, поэтому, когда состояние кнопки «вниз», вызывается функция. Есть ли что-то подобное, что я могу сделать с событиями касания?Kivy: есть состояние касания, как состояние кнопки?

Пример использование 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() 

ответ

0

но мне нужна функция, которая будет вызван во время касания активно в том числе, когда позиция прикосновения не меняется

Сенсорные становится активным, когда вы получаете on_touch_down и больше неактивны, когда вызывается on_touch_up для того же касания. Какую бы логику вы ни хотели, вы можете просто позвонить ей через них.

в то время как состояние кнопки «вниз» функция называется

Я не знаю, что вы имеете в виду под этим - если вы просто хотите, чтобы вызвать функцию, когда прикосновение происходит, используйте on_touch_down ,

Если вы хотите вызвать функцию условно на присутствующем прикосновении, просто сохраните список текущих касаний (вы можете добавить к нему, когда вы получите on_touch_down, и удалите, когда вы получите on_touch_up) и поработайте с ним, однако вы хотеть.

Смежные вопросы