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