2014-06-29 64 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不会收到它。更改小部件的顺序可解决问题。

相关问题