我在理解猕猴桃方面遇到困难。我正在创建一个带有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()
我找到了答案,这是因为事件是按照与添加事件相反的顺序分派给小部件的(因此,在我的情况下,将是btn2
,CustomBtn
然后是btn1
)。因此,当btn2
单击时,它吞噬了触摸事件,因此CustomBtn
不接收它。更改小部件的顺序可解决此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句