首页 > 解决方案 > 关于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,一切都很好,当按下三个按钮中的任何一个时,都会调用正确的处理程序并且只调用正确的句柄。

标签: pythonkivy

解决方案


标签文档指出,如果返回 True,传播将停止。我建议一个错误报告。我看到你在这个例子中所做的同样的事情。

https://kivy.org/doc/stable/api-kivy.uix.label.html

on_touch_down(触摸)

bool 如果为 True,则触摸事件的调度将停止。如果为 False,则该事件将继续分派到小部件树的其余部分。


推荐阅读