目录

事件

Kivy 主要是基于事件的(参见 <https://en.wikipedia.org/wiki/Event-driven_programming>),这意味着程序的流程由事件决定。

时钟事件

../_images/gs-events-clock.png

: 时钟对象 允许您通过 schedule_once() 将函数调用安排为一次性事件,或通过 schedule_interval() 将其安排为重复事件。

你也可以使用 create_trigger() 创建触发事件。触发器的优势在于,即使你为同一个回调函数安排了多个触发,它每帧也只会被调用一次。

输入事件

../_images/gs-events-input.png

所有的鼠标点击、触摸和滚轮事件都属于 MotionEvent 的一部分,由 输入后处理 扩展,并通过 Window 类中的 on_motion 事件进行分发。该事件随后在 Widget 中生成 on_touch_down()on_touch_move()on_touch_up() 事件。

如需深入了解,请参阅:doc:/api-kivy.input

类事件

../_images/gs-events-class.png

我们的基类 EventDispatcher,被 Widget 所使用,利用了我们 属性 的强大功能来分发变更。这意味着当一个小部件改变其位置或大小时,相应的事件会自动触发。

此外,您还可以通过使用 register_event_type() 来创建自己的事件,正如 Button 控件中的 on_presson_release 事件所示。

另外需要注意的是,如果你重写了一个事件,你就需要负责实现该事件之前由基类处理的所有行为。最简单的做法是调用 super():

def on_touch_down(self, touch):
    if super().on_touch_down(touch):
        return True
    if not self.collide_point(touch.x, touch.y):
        return False
    print('you touched me!')
    return True

通过阅读 事件与属性 文档,进一步熟悉事件。