前言

移动应用开发几年前就是热点了,现在是个软件用户就想要移动版。桌面操作系统也受到影响,跨平台的软件成为新常态。甚至通常局限于微软桌面操作系统的游戏开发者也开始找一些Mac和Linux平台上的工作了(比如Steam,目前有Mac游戏近4000个,SteamOS+Linux游戏2000多个)。

这对新手和个人开发者是大利好:跨平台的支持可以增加用户,销售量自然会更好。

但是,写可移植的软件是非常耗费资源的过程,对小公司和个人开发者的影响比大公司更甚。

尤其是许多平台都有不同语言的SDK:iOS用Objective-C和Swift,Android用Java,MS用.Net,更多是C#来开发软件。

使用这些工具可以通过系统功能来制作相应的原生应用,但是跨平台的代码重用变得十分困难。就算你精通所有语言和相关的操作,代码的移植仍然是一件复杂的事情。

一次编写,到处运行

因此,统一多平台支持开发工具呼之欲出。无独有偶,1995年的Sun公司就为解决类似问题发明了Java。其口号为“Write once, run anywhere”(一次编写,到处运行,WORA),虽然Java已经20年了,很多人都在各种纪念。但是其啰嗦的代码仍然没能实现当年的豪言壮语,一些程序员的改编版本更能表达人们的感受——“write once, run away”(一次编写,到处跑偏),有一些放弃Java转向了更好的程序语言,比如Python。

本书主题Kivy是一个图形用户界面(graphical user interface,GUI)工具用来轻松创建跨平台的Python应用。其主要特征如下:

  • 兼容性:Kivy支持多平台,包括Windows,MacOS,Linux,Android和iOS,均出自一个工具
  • 原生界面:Kivy填补了不同输入方式间的缝隙,允许你用相同的代码处理不同的输入方式,包括鼠标和触摸屏
  • 快速图形硬件加速:OpenGL渲染让Kivy可以胜任图形需求高的应用,如视频游戏,还可以通过平滑变换改善用户体验
  • 使用Python开发:Kivy的app是用Python写的,轻松简单,可移植性良好,Python的标准库和PyPI第三方丰富模块都可以使用

Kivy可以看作许多模块的超集:许多知名的模块如Pygame,SDL,GStreamer都是Kivy的组成部分。但是,Kivy的API更加高级、统一,方便使用。

Kivy是开源的,其源代码在GitHub上。你可以fork一下,帮忙打补丁,也可以增加新特性。

本书内容简介

本书分9章。

  • 第1章,时钟app对Kivy应用开发做简要介绍。包括Kivy语言、布局、部件和计时器。本章会做一个时钟app,与手机上的时钟应用类似
  • 第2章,画图app对Kivy框架的部件和功能进一步挖掘。通过制作画图app学习自定义部件,在画布上画任意形状,处理多点触控事件等
  • 第3章,Android录音app是用Kivy开发一个Android应用。通过Pyjnius模块实现Python与Java的交互,调用Android的API来实现Kivy用户界面
  • 第4章,聊天app介绍Kivy的网络应用开发,用Python写一个简单通信协议,利用Twisted框架建立服务器-客户端模型,实现一个Kivy聊天app
  • 第5章,远程桌面app用另一种方式写服务器-客户端应用。这章通过HTTP协议来构建模型。首先建立命令行模式的HTTP服务器,然后再用Kivy实现远程桌面app
  • 第6章,2048 app是实现一个2048游戏。我们将演示Kivy更复杂的功能,用Kivy属性实现数据绑定和触摸手势处理来创建自定义部件
  • 第7章,飞翔的小鸟app是另一个Kivy游戏,实现著名的Flappy Bird游戏。我们会学习纹理坐标的使用,声音效果和碰撞检测等知识
  • 第8章,着色器app介绍Kivy应用中如何GLSL着色器。这一章首先介绍OpenGL原始类型的概念,如索引和顶点,然后写出可以直接在GPU上运行代码,最后实现一个满天星屏保app
  • 第9章,射击app延续上一章的内容,用GLSL着色器做游戏。首先实现一个可重用的粒子系统,然后通过粒子系统构建游戏角色。前面介绍过的许多内容在这个游戏中都会得到体现,如碰撞检测,触摸屏控制,声音效果等

环境设置

下面简要介绍Kivy的安装方法,包括Mac,Linux和Windows系统。

Python

Kivy同时支持Python2和Python3,2020年Python2停止维护,建议使用Python3。

许多平台不需要单独安装Python:比如Mac OS上自带Python2,Windows上和Kivy打包在一起,Linux(尤其是Ubuntu)支持apt-get安装。

安装并运行Kivy

Kviy的最新稳定版本可以在官方网站找到。如下图所示:

kivydownload

下载安装包后,具体平台安装方法可以看图中第三列指令,简要介绍如下:

  • Mac:
    1. 打开命令行窗口
    2. 执行kivy
    3. Python提示符出现后输入import kivy
    4. 如果安装顺利会出现[INFO] Kivy v1.9.0
  • Linux:
    1. 打开命令行窗口
    2. 执行python
    3. Python提示符出现后输入import kivy
    4. 如果安装顺利会出现[INFO] Kivy v1.9.0
  • Windows:
    1. 双击kivy.bat文件
    2. 执行python
    3. Python提示符出现后输入import kivy
    4. 如果安装顺利会出现[INFO] Kivy v1.9.0

运行Kivy应用很简单:

  • Mac上用kivy main.py
  • Linux上用python main.py
  • Windows上用kivy.bat main.py(或者把main.py拖到kivy.bat上运行)

Hello, Kivy

下面我们演示一个Kivy app的hello world版。

代码

程序的入口是main.py,代码如下:

from kivy.app import App


class HelloApp(App):
    pass


if __name__ == "__main__":
    HelloApp().run()

布局

布局文件是应用类名的去掉App的小写部分加.kv,也就是hello.kv,代码如下所示:

Label:
    text: 'Hello, Kivy'

这里只用了一个Kivy标签部件Label,属性是text。布局文件用一种简洁、声明式的语言定义复杂的布局,后面会介绍。

运行程序,看到的界面如下所示:

kivydownload

下面就让我们开始Kivy之旅吧!Enjoy

Tip: 最新源代码请参考作者Mark Vasilkov的github