C语言季、编程向导(4.4架构预览)

编程向导4.4架预览

俺们将要花费有时空坐软件管理的角度来分解如何筹划Kivy。这将凡知道每一样组成部分如何一起工作的最主要。你也许浏览过源代码,也许有理一个粗的概念;但是看源代码也许是让人生畏的,因此就节内容以会晤详细说明有为主的定义。你得稍过本节以待日后更拘留,但咱建议你足足约浏览一下。

Kivy由几只模块组合,下面是Kivy架构图:

Architectural Overview

一如既往、核心提供者和输入提供者

接头Kivy内部思想的严重性是模块化和浮泛。我们准备抽象一些基本的职责,例如打开一个窗口、展示图片与文书、播放音频、从摄像头获取图像、拼写检查等等。我们遂它也主干职责。这让API既容易使以爱扩展。更关键之是,它同意我们就此:what
we call
,在您的应用程序运行时的不同场景指定不同之提供者。例如,在OS
X,Linux和Windows系统上,针对不同之为主职责产生差的本土APIS。一方面这些APIS同操作系统进行交流,另一方面我们调用的Kivy的核心提供者扮演着中交流层的角色。使用特别核心提供者的便宜的处是咱可以尽的下操作系统暴露出的机能,尽可能的使程序运行的再快速。它深受用户提供了一个时机。另外,通过采用那些对一个阳台的库房,我们好迅速地比逊色应用程序打包的尺码。这也教移植到别的平台更爱把。安卓端口由当下上头就是获利巨大。

咱们以同的思绪处理输入提供者。输入提供者,支持有例外之输入设备,例如苹果之trackpads,TUIO或者鼠标模拟器。如果你得丰富一个初的输入设备,你只需要简单的增长一个初的类来读取你的输入数据以以那个更换到Kivy的主导事件。

二、图形

Kivy的图像接口是咱们本着OpenGL的抽象。在重复小之层面,Kivy使用OpenGL来散发硬件加速指令。对于一个初大方的话,写OpenGL代码也许是驱动人迷惑的。这吗是咱提供图片API接口的来头,你唯有待采取简单的包好的计(例如Canvas,Rectangle等等)进行绘画即可。

俺们的具有部件本身就是是行使这些图片接口,为了还迅捷的见,它们以C语言执行。

除此以外一个福利的处是这些图片接口可以活动优化绘画指令。如果您免是一个OpenGL的专家,这将是老有因此底佑助。在无数的情景下,它用设您的绘代码更速。

自然你啊得采用OpenGL命令。我们在有的设施及行使的是OpenGL2.0(GLSE2),所以如果您想维持更好的跨平台的兼容性,我们建议你偏偏用GLSE2提供的函数。

三、核心

核心提供者提供了片通用的功力,例如:

  • Clock(时钟):你可以采用时钟来计划定时器事件。一次性的定时器和周期性的定时器都被支持。
  • Cache(缓存):如果你需要以你常用之片段物缓存起来,你得采取我们提供的缓存类,而休是上下一心再造一个轮子。
  • Gesture
    Detection(手势检测)
    :我们提供了一个粗略的手势识别,你得就此来检测不同类型的轨道,例如圆圈或者矩形。你得自己训练她来检测好之轨迹。
  • Kivy Language(Kivy语言):Kivy语言可以好并火速地描述用户接口。
  • Properties(属性):这里的性能不是您熟悉的Python里面的性质,它们是咱团结一心之属于性类,以用来链接你的部件代码和用户接口描述。

季、UIX(部件和布局)

UIX模块包含常用的预制构件与布局,你可以重复使用它们来创造一个用户接口。

  • Widgets:部件是用户接口元素,它们有可见,有的不可见,例如文件浏览窗口、按钮、滑块、列表等等。部件接收MotionEvents。
  • Layouts:你得利用布局来排部件。当然你可以手动的亲善来布局部件,但是一般使用布局会进一步的便宜。布局包括网格布局、盒子布局等,你啊得布局嵌套。

五、模块

万一你已经采用过现代之网页浏览器,并定制了局部插件,那么您早就了解了关于我们模块类的基本概念。模块用来叫注入力量到Kivy程序中,即使原作者没有包括其。

一个例展示了一个总是显示FPS的模块和组成部分勾FPS的图纸。

若呢得以写好的模块。

六、输入事件(触摸)

Kivy抽象了不同的输入型和资源,例如触摸、鼠标、TUIO等等。所有这些输入型的共同之处是你可以使用一个屏幕及之2D坐标以及一些突出的输入事件波及起来。(一些其他的输入设备,例如加速器你尽管无能够简单的动2D坐标来讲述。这看似输入设备为分级比)

拥有的这些输入设备档次为Touch()类的实例来代表。(注意就不只意味着手指触摸,也同等表示别的输入型。我们只是为类似而采取了Touch的讳。)一个Touch的实例或对象,包含在三个状态,当一个碰进入到了这些状态,你的程序于通报,该事件有了。这三单状态如下:

  • Down:一个碰被据下同样不好
  • Move:A touch can be in this state for a potentially unlimited
    time. A touch does not have to be in this state during its lifetime.
    (一个动手可能当一个私房的极端的日里。一个动在它的生命周期中无会见一直当是状态。)当一个碰的2D坐标发生变更时,Move用会见事件时有发生。

gthank:前面的点滴句话不明白呀意思!

  • Up:一个动手抬起至多一致不好还是没。实际行使被,你将总会接受到一个Up事件,因为尚未丁会晤永远将一个手指在屏幕及,但是就不是发保的。如果您知用户在采取的输入源,你拿会晤清楚是否指之状态。

七、部件与波发送

部件是术语通常用当GUI编程中,来描述和用户交互的那有些先后。在Kivy中,一个构件是一个靶由来接受输入事件。在屏幕及出一个可视的象征是没必要之。所有的构件在一个部件树被管理:一个部件能起零或者多个支行部件。但是在培养的上面只能有一个清部件,根部件没有父部件;其它的预制构件直接或间接的凡彻底部件的旁部件。

当一个初的输入数据可用时,Kivy发送一个事件。根部件首先接受该事件。根据触摸的状态,on_touch_down,
on_touch_move,
on_touch_up事件给发送到根本部件,这将招致在根本部件中相应的事件处理函数被调用。

以培训被的各一个构件能挑收或传递事件。如果一个事件处理函数返回True,这象征这事件于接并不错的拍卖,对于该事件,没有更的处理会发生。否则,这个事件处理函数通过调用它的父类的独家事件处理函数的兑现,传递部件到其和谐的分段部件上。最终事件传递及部件的基类,在她的事件处理函数里,什么到非开,仅仅传递touchs到它们的道岔部件。

#这是一个move/up的模拟
def on_touch_down(self, touch):
    for child in self.children[:]:
        if(child.dispatch('on_touch_down', touch)):
            return True

她恐怕较看起再也便于。下面的章节会展示一个事例,漂亮的应用程序能够快速的让创造。

通常你想限制一个部件监听触摸事件的屏幕区域。你得下部件的collide_point()方法来完成即点。你传递给它们触摸的坐标,并且她将赶回监听的区域。默认情况下,屏幕及矩形区域之检测采用部件的坐标和尺寸来叙述,但是你为会以投机之好像吃进行重载。

下节主:编程向导4.5风波及属性