iOS的Pythonista虽然是个收费app,不过总体还是不错的。 不过iOS终归没有安卓的自由。 搜索一番后,Kivy进入我的视野。
先在Windows下把环境装好吧。
强烈建议使用conda,anaconda或者miniconda都行,一句conda install kivy -c conda-forge
就能搞定,而pip看起来坑比较多。 不过要注意的是conda环境要新建一个基于python3.7的,最新的python3.8好像kivy不支持。
在网上找一个HelloWorld的demo,运行无压力。
然而把字符串改为“你好世界”后,竟然显示的都是方框。 看样子kivy对中文的支持好像不行呀。
再搜索一番,原来这货需要指定字体呀。下载一个 DroidSansFallback.ttf 字库文件(网上大把下载)放在HelloWorld程序相同文件下,然后在程序中指定字体,能显示中文了。
# -*-coding:utf-8-*-
import kivy
#kivy.require('x.y.z')
from kivy.app import App
from kivy.uix.label import Label
class HelloWorldApp(App):
def build(self):
return Label(text='你好, 世界 !', font_name="DroidSansFallback.ttf")
if __name__ == '__main__':
HelloWorldApp().run()
kivy有一个叫Kv Language的玩意,可以实现UI与代码分开,挺好的。
可以用如下代码试一下:
HelloWorld.py文件
# -*-coding:utf-8-*-
import kivy
#kivy.require('x.y.z')
from kivy.app import App
from kivy.uix.label import Label
from kivy.lang import Builder # 增加一个import用来导入.kv文件
with open("hello.kv", encoding='utf-8') as f:
# Note the name of the .kv
# doesn't match the name of the App
Builder.load_string(str(f.read()))
class HelloWorldApp(App):
def build(self):
#return Label(text='你好, 世界 !', font_name="DroidSansFallback.ttf")
return Label()
if __name__ == '__main__':
HelloWorldApp().run()
再新建一个hello.kv文件,注意不要使用helloworld.kv,因为虽然对于上面class HelloWorldApp(App)的,相对应的会自动导入文件名为helloworld.kv文件,但是因为自动导入的kv文件的中文兼容性有问题,我们上面使用了open以utf-8解码导入了hello.kv文件。
hello.kv文件
<Label>:
text: '你好世界!'
font_name: './DroidSansFallback.ttf'
注意上面的kv文件中也指定了字体文件
kivy可以打包成apk,不过我大概看了下,还是有点麻烦的。 具体可以看看 https://github.com/kivy/buildozer
不过可以先用Kivy Laucher先运行下试试。
先下载Kivy Laucher,下载地址:
https://kivy.org/downloads/1.9.0/KivyLauncher-1.9.0.0.apk
然后在安卓系统内安装。安装后桌面应该就有Kivy Laucher的启动图标了。
然后用电脑连接手机,在 “内部存储” 或者 “SDCard” 或者 “Storage” 里新建文件夹 kivy/hello。然后新建编辑android.txt, main.py和hello.kv,然后将他们连同DroidSansFallback.ttf字体文件一起拷贝到hello文件夹下。
android.txt文件
title=Hello
author=Your Name
orientation=portrait
main.py文件,好像主程序文件必须是这个文件名
# -*-coding:utf-8-*-
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.lang import Builder # 增加一个import用来导入.kv文件
Builder.load_file('hello.kv', encoding='utf-8') # 这次我们来用另一种方法导入kv文件,似乎简单些
class HelloWorldApp(App):
def build(self):
return Label()
if __name__ == '__main__':
HelloWorldApp().run()
hello.kv文件,一样需要指定字体,不然中文会变方框
<Label>:
text: '你好世界!'
font_name: './DroidSansFallback.ttf'
文件拷贝完毕后,启动Kivy Laucher应该就可以看到名叫Hello的程序了。
点击它就可以运行了。(中文也ok)
貌似无痛,以后有空试试打包apk。