gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:42:30 25 4
gpt4 key购买 nike

我无法理解 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()

最佳答案

我找到了答案,这是因为事件是按照它们添加的相反顺序分派(dispatch)给小部件的(所以在我的例子中是btn2CustomBtn然后是 btn1)。因此,当 btn2 被点击时,它会吃掉触摸事件,因此 CustomBtn 不会收到它。更改小部件的顺序可解决此问题。

关于python - 自定义小部件未在 kivy 中接收触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24475629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com