企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 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 非部件类