自定义小部件未在kivy中接收触摸事件

时间:2014-06-29 11:23:55

标签: python kivy

我无法理解kivy。我正在创建一个带有2个按钮的GUI和一个自定义小部件,它应该打印它接收的触摸的坐标,问题是自定义小部件显然没有接收源自btn2的触摸事件。我相信它应该接收事件,因为根小部件(窗口)必须将事件分派给它的所有子节点(包括自定义小部件)。

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()

1 个答案:

答案 0 :(得分:0)

我找到了答案,这是因为事件按照添加的相反顺序被分派到窗口小部件(因此在我的情况下,它将是btn2CustomBtn然后{{1} })。因此,当点击btn1时,它会占用触摸事件,因此btn2不会收到它。更改小部件的顺序可以解决问题。