自定义小部件在Kivy中未接收触摸事件
我在理解kivy的时候遇到了一些困难。我正在创建一个图形界面,里面有两个按钮和一个自定义的小部件,这个小部件应该能够打印出它接收到的触摸坐标。问题是,这个自定义的小部件似乎没有接收到来自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 个回答
2
我找到了答案,问题在于事件是按照相反的顺序发送给小部件的,也就是说在我的例子中,顺序是 btn2
、CustomBtn
,然后是 btn1
。所以当你点击 btn2
的时候,它会先处理这个触摸事件,这样 CustomBtn
就收不到这个事件了。调整小部件的顺序就能解决这个问题。