0x01前置知识
阅读本文必须具备的知识,避免你观看这篇文章以后一无所获,浪费了时间:)
python基础,如果没有学习过python又打算学习一门编程语言作为业余工具那么选择python吧
kivy是什么,kivy是一个GUI框架,如果你正在苦于python在移动端没有合适的GUI框架,那么选择kivy吧。
有一颗坚强的心灵去接受不断出现的错误提示,虽然下面的内容不会充斥着各种错误(一些小错误还是会有的,请发现的朋友在下面留言,一起进步J),但是你在重现下面的安装过程中可能会发生一些额外的错误,请将错误提示精炼成关键词然后google之,大部分会得到很好的答案。
看的懂英文or熟练使用翻译工具,不需要太懂英文,我也是一知半解,借助百度翻译还是能看懂各种简短的说明的。
会过墙,这很重要,可以说如果要深入研究编程的任何一个方面那么你都必须首先具备跨越墙的能力,我经常使用的软件有ziyoumen,saifeng,搜索一下会有更多适合你的软件。
0x02前奏 说点关于kivy的事儿
kivy在国内一直是处于不温不火的状态,我加过的几个群基本都是重复加群的群友- -!对于kivy开发的认识差距也比较大,就开发环境这点对于大神而言就是八仙过海各显神通,对于新人却是折腾好几天也未必能架设一个能用的环境,更别提开发的效率、调试、测试、打包的事情了,官方提供了各个平台下一整个镜像包解决方案,对于开发环境没有给出建议,右击发送执行的方式效率实在很低。这里我写这篇文章目的在于抛砖引玉,希望kivy大神写一些kivy编程方面的教程,一来可以降低kivy学习门槛,二来也会让kivy得到更多开发者的支持。
0x03起步 使用winpython吧
1、winpython介绍
在开发kivy程序之前我们必须要有一个轻量而功能齐全的IDE,这里我推荐winpython,winpython是windows平台下用于科学计算的python IDE发行版,由Python(x,y)(也是用于科学计算的python IDE)的作者开发,相对于Python(x,y),它主要是关注便携式安装体验:你可以把它装在u盘里面,我这里选择winpython是因为相对于python(x,y),winpython更小也更稳定。官方网站:http://sourceforge.net/projects/winpython/,支持windows xp/7/8,支持32bit/64bit的Python2和3。winpython集成了spyder作为编辑环境,spyder内嵌idle、ipython控制台(这个控制台比idle好用多了,它支持语法着色,代码行号等等功能,不过个别的模块在它上面不能正常运行,需要使用idle,比如mayavi(一个3d可视化科学分析模块),kivy(我们只把ipython当控制台用就足够了))。
winpython提供了一个命令行工具winpython command prompt,这个工具会把winpython安装目录添加到path变量中,这样就可以在不修改系统环境变量的情况下方便的使用winpython的脚本,这对于在windows下面安装了多个python特别有用,避免多个python的环境变量互相干扰。
winpython还提供了一个图形界面的包管理工具winpython control panel,方便安装和卸载python包,虽然不如pip来的强大,但是对于刚刚接触python的人来说是很便利的存在.J
winpython集成了pyqt作为gui开发框架,pyqt是python和qt的结合,qt是个好东西,它是一个跨平台(windows、linux、MAC os、android、ios和wp)面对对象的GUI开发框架,pyqt实现了在python里面调用qt库,目前使用pyqt可以轻松的编写运行在windows、linux、mac os上的gui程序。要移植到android上需要费些周折,可以看这里http://modrana.org/trac/wiki/PySideForAndroid。移动平台的pyqt开发更多情况可以看这里http://stackoverflow.com/questions/16723258/using-pyside-pyqt-for-mobile-development(这里面有人提到kivy了)似乎在ios和wp上还没有可行方法。
2、安装winpython
到官网http://sourceforge.net/projects/winpython/files/下载winpython安装包,建议使用winpython 2.7.9范围内的版本,因为python2.7.9开始集成了pip,不用自己折腾去get-pip,不建议使用winpython 3以上的版本,因为有些包还没有3以上的版本,为了可以持续的开发还是选择2.7.9吧。推荐使用的版本http://sourceforge.net/projects/winpython/files/WinPython_2.7/2.7.9.4/这是最新的2.7.9发行版,如果你在目录里面发现更新的当然选择最新的下载,如果是windows 64bit,那么建议下载winpython-64bit。
下载下来后双击运行,选择安装目录就可以了。一般安装在盘符的根目录下面,不要在安装路径里包含空格。安装过程其实是个解压过程,安装完毕后我们还要把winpython注册到windows当中,这样就能在开始菜单里找到它了。打开winpython安装目录,运行winpython control panel(简称wcp)。点击菜单advanced—register distribution,点击yes就可以了。
运行安装目录下的spyder.exe(不是spyder light)就可以看到一个简洁的开发环境了。现在建议读者先根据上面对winpython集成的工具介绍对应下winpython安装目录下的工具,运行它们,熟悉界面。
安装目录下的python-2.7.9.amd64目录(我安装的是64bit版本)就是一个完整的官方python实现,打开这个目录你会发现这和官方python目录一模一样。
0x04 安装kivy
这里我们要使用编译好的kivy包,去哪找呢,这是个问题,幸好加利福尼亚大学的几个人维护了一个windows平台已编译python扩展库网站,这可是广大windows python用户的福音啊,网址在这里http://www.lfd.uci.edu/~gohlke/pythonlibs/#kivy可以直接在页面里面查找想要的包,这里几乎包括了所有常用的python扩展库,并且列出了每个包依赖的包,只要我们根据python版本下载正确的包就可以了。这里我下载 Kivy1.9.0+sdl2cp27nonewin_amd64.whl(如果你是32bit的winpython就下载win32那个),注意看kivy下载列表上面写着required pygame,也就是说要安装pygame包,我们打开wcp,切换到uninstallpackages看看winpython是否已经安装了pygame,显然已经安装了,版本是1.9.2a0(可能因为winpython版本的不同这个版本号也会不同)。所以我们就不需要安装pygame了。下载完kivy,直接拖到wcp的install/upgradepackages里面,点击底下的install package按钮稍等一下就安装完kivy了,在uninstall packages可以看到安装好的kivy。
可以看到kivy的描述是一个快速开发经过硬件加速的多点触控应用的库。
0x05 编辑运行kivy程序
启动spyder,界面和普通程序一样,上面是菜单栏、工具栏,左边是编辑区,右边是各种面板,可以通过菜单view—panes打开关闭它们。编辑区默认会打开一个未保存的python脚本,如果没有就点工具栏第一个按钮新建,上面写着编码声明、脚本创建时间、作者,我们可以直接在这里书写代码然后ctrl+s保存。右边上半部分包括几个面板,下面依次介绍下(如果你的spyder没有下面的某个面板,在菜单view—panes可以打开它):
object inspector
对象查看器,默认source右边是console,在object输入框里输入模块、类、函数、变量名就可以获取帮助信息。比如sys、exceptions、len、__doc__。不支持查看方法帮助信息。
variable explorer
变量浏览器,在程序运行的时候可以在这里看到程序当中变量的名称、类型、大小、值。
file explorer
文件浏览器,类似于windows资源管理器,这里可以很方便的管理代码存放的目录。
profiler
性能测试工具,点击输入框右边文件夹图标选择一个要测试性能的程序代码,然后它就会自动加载并运行程序,点击stop停止。就会弹出程序运行时的调用情况,profiler的列表里也会显示每个函数、模块运行的时间、被调用的次数。双击函数、模块就会在编辑区显示其所在的代码。
介绍完spyder,现在我们可以开始编写kivy程序了(正片终于来了),照例我们使用官网提供的hello world程序。
from kivy.app import App from kivy.uix.button import Button classTestApp(App): def build(self): return Button(text='Hello World') TestApp().run()
在运行前需要设置下run setting,菜单tools—preferences,选择左边的run,看到右边console下面有三个运行方式:在当前的python或ipython控制台运行;新建一个控制台运行;在系统终端运行(这里就是windows cmd)。选择executein a new dedicated python console,点击确定即可。
现在按f5或者点击工具栏第二组第一个按钮就可以运行程序了。不过如果把text改成中文就出现乱码,要正常输出中文必须在字符串前加u,在button对象中提供字体名称,kivy默认使用英文字体,这里我们添加上系统自带的中文字体,在windows下典型的中文字体是华文仿宋,路径为C:\Windows\Fonts\STZHONGS.TTF;在android下默认的中文字体是DroidSansFallback.ttf,路径为/system/fonts/DroidSansFallback.ttf。代码如下:
#windows # -*- coding: utf-8 -*- from kivy.app import App from kivy.uix.button import Button class TestApp(App): defbuild(self): returnButton(text=u'人生如此艰难',font_size=18,font_name=r'C:\Windows\Fonts\STZHONGS.TTF') TestApp().run()
#android # -*- coding: utf-8 -*- from kivy.app import App from kivy.uix.button import Button class TestApp(App): def build(self): returnButton(text=u'人生如此艰难',font_size=18,font_name=r'/system/fonts/DroidSansFallback.ttf') TestApp().run()
上面安卓代码只能在安卓机上面运行了,可以在安卓机上面装一个qpython,就可以运行kivy代码了,在qpython上面运行kivy代码还要在代码开头添加一行#qpy:kivy。