python - 关于kivy中事件调度行为的问题
问题描述
我有一个测试 python 片段:
.py 文件:
from kivy.app import App
class tutorApp(App):
def bn_pressed(self,button):
print(button.text)
return True
app = tutorApp()
app.load_kv('tutorial-3.kv')
app.run()
和 kv 文件(tutorial-3.kv):
<Tb@Button>:
on_touch_down:app.bn_pressed(self)
BoxLayout:
Tb:
text:'button1'
Tb:
text:'button2'
Tb:
text:'button3'
当我从左到右按下这三个按钮时,我得到:
# press left
button3
button2
button1
# press middle
button3
button2
# press right
button3
我改变了这一行:
<Tb@Button>
至
<Tb@Lable>
再做一次新闻,我得到了:
# press left label
button3
button2
button1
# press middle label
button3
button2
button1
# press right label
button3
button2
button1
这种差异的原因是什么?假设当我在 event_handler 中返回 True 时停止事件传播,为什么它会被调用?
感谢您的帮助。
顺便提一句。如果我将事件更改为 on_press,一切都很好,当按下三个按钮中的任何一个时,都会调用正确的处理程序并且只调用正确的句柄。
解决方案
标签文档指出,如果返回 True,传播将停止。我建议一个错误报告。我看到你在这个例子中所做的同样的事情。
https://kivy.org/doc/stable/api-kivy.uix.label.html
on_touch_down(触摸)
bool 如果为 True,则触摸事件的调度将停止。如果为 False,则该事件将继续分派到小部件树的其余部分。