2014-06-29 62 views
1

我無法理解kivy。我正在創建一個帶有2個按鈕和一個自定義小部件的圖形用戶界面,它應該打印它接收的觸摸座標,問題在於自定義小部件顯然沒有接收源自btn2的觸摸事件。我相信它應該接收該事件,因爲根窗口小部件(窗口)必須將事件分派給其所有子項(包括自定義窗口小部件)。自定義小部件未在kivy中接收觸摸事件

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import ListProperty 

class RootWidget(BoxLayout): 

    def __init__(self, **kwargs): 
     super(RootWidget, self).__init__(**kwargs) 
     self.add_widget(Button(text="btn1")) 

     self.add_widget(CustomBtn()) 

     self.add_widget(Button(text="btn2")) 

class CustomBtn(Widget): 

    pressed = ListProperty([0,0]) 

    def on_touch_down(self, touch): 
     self.pressed = touch.pos 
     return False 

    def on_pressed(self, instance, value): 
     print "[CustomBtn] touch down at ", value 

class Demo(App): 

    def build(self): 
     return RootWidget() 


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

回答

0

我找到了答案,那是因爲事件被分派到其另外的相反順序的小部件(所以在我的情況下,將btn2CustomBtn然後btn1)。因此,當點擊btn2時,它會消耗觸摸事件,因此CustomBtn不會收到它。更改小部件的順序可解決問題。

相關問題