### 1.6事件
Kivy基本上是[基于事件](http://en.wikipedia.org/wiki/Event-driven_programming)驱动的,这也就意味着程序执行顺序被事件所决定。
1. 时钟事件
[时钟对象](https://kivy.org/docs/api-kivy.clock.html)允许你使用[schedule_once()](https://kivy.org/docs/api-kivy.clock.html#kivy.clock.ClockBase.schedule_once)来定时执行一个函数;或者使用[schedule_interval()](https://kivy.org/docs/api-kivy.clock.html#kivy.clock.ClockBase.schedule_interval)重复执行一个函数。
你也可以利用[create_trigger()](https://kivy.org/docs/api-kivy.clock.html#kivy.clock.ClockBase.create_trigger)创建一个触发事件,触发器只能被一个框架调用一次,即使你为该回调函数设置了多次触发。
2. 输入事件
所有的鼠标点击、触摸、滚轮滚动事件都是[MotionEvent](https://kivy.org/docs/api-kivy.input.motionevent.html#kivy.input.motionevent.MotionEvent)事件的一部分;输入事件扩展自[输入处理](https://kivy.org/docs/api-kivy.input.postproc.html),当在**窗口**类执行on_motion事件时被发送。在[部件](https://kivy.org/docs/api-kivy.uix.widget.html#kivy.uix.widget.Widget)中这些事件生成为[on_touch_down()](https://kivy.org/docs/api-kivy.uix.widget.html#kivy.uix.widget.Widget.on_touch_down),[on_touch_move()](https://kivy.org/docs/api-kivy.uix.widget.html#kivy.uix.widget.Widget.on_touch_move)和[on_touch_up()](https://kivy.org/docs/api-kivy.uix.widget.html#kivy.uix.widget.Widget.on_touch_up)事件。
要进一步了解,请参阅[输入管理](https://kivy.org/docs/api-kivy.input.html)
3. 类事件
在[部件](https://kivy.org/docs/api-kivy.uix.widget.html#kivy.uix.widget.Widget)里,我们的事件分发类[EventDispatcher](https://kivy.org/docs/api-kivy.event.html#kivy.event.EventDispatcher)被用来有效的管理属性值的变动,这意味着当一个部件改变了它的位置、尺寸,相应的事件就会自动的发送。
并且,正如在按钮部件中,*on_press*和*on_release*等事件所展示的那样,你可以利用[register_event_type](https://kivy.org/docs/api-kivy.event.html#kivy.event.EventDispatcher.register_event_type)创建自定义事件,
另外你需要注意的是,如果你重载了一个事件,那么你就必须处理它在基类中定义的所有行为。一个最容易的方式是调用*super()*:
```Python
def on_touch_down(self, touch):
if super(OurClassName, self).on_touch_down(touch):
return True
if not self.collide_point(touch.x, touch.y):
return False
print('you touched me!')
return True
```
如果想对事件有更深入的了解,请参阅[事件和属性](https://kivy.org/docs/guide/events.html)文档
### 下节预告:1.7 非部件类