2012-11-08 2 views
0

버튼을 놓을 때 on_touch_up이 실행되는 이유를 잘 모릅니다. 다른 두 이벤트 인 on_touch_down과 on_touch_move는 시작되지 않습니다.on_touch_up 이벤트가 캔버스로 수신되었습니다. 확실하지 않은 이유

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.button import Button 


class MyPaintWidget(Widget): 

    def on_touch_down(self, touch): 
     print "on_touch_down" 

    def on_touch_move(self, touch): 
     print "on_touch_move" 

    def on_touch_up(self, touch): 
     print "on_touch_up" 


class MyPaintApp(App): 

    def build(self): 
     parent = Widget() 

     painter = MyPaintWidget() 
     btn = Button(text='Click Me') 

     parent.add_widget(painter) 
     parent.add_widget(btn) 

     return parent 

if __name__ == '__main__': 
    MyPaintApp().run() 

답변

3

위젯을 클릭했을 때 정의 된대로 MyPainterWidget의 위, 아래 및 이동 메서드가 오버로드되어 실행됩니다.

uix.Button에는 on_touch_up 메서드가 없으므로 이벤트가 위젯 트리 위로 전파됩니다. 당신은 우리는 이제을 클릭하는 경우에도 모두 "on_touch_up"와 "on_touch_down"콘솔에 인쇄되는 것을 볼 수

parent.add_widget(btn) 
parent.add_widget(painter) 

parent.add_widget(painter) 
parent.add_widget(btn) 

의 순서를 변경하여이 조금 더 조사 할 수 "on_touch_up"보다는 uix.Button을 사용하십시오.

kivy가 이벤트를 처리하는 방식의 측면입니다.

관련 문제