标题: windows下体验kivy-跨ios,android的Python开发方案

时间: 2013-12-15 00:05:30

正文:

[2014-12-22 10:07:37] 最近又开始捡起 kivy 来了解了下, 貌似中文问题有了还凑合的解决, 暂时还没试, 另外找到几个 kivy 相关的 QQ 群 , 我已经加入的推荐下: 310972838 , 使用的人少, 聚一起可以促进更快的交流学习.

        转载请注明出处 http://blog.hickwu.com/posts/311 by Hick

官方下载链接中标明的是 win7 版本,说明文档中也有提及 win8 的相关操作,实际上 win xp 下也启动了 kivy 应用。以下操作在 win xp 和 win81 中测试通过。

安装

  1. http://kivy.org/#download 下载 windows 版本。实际上是一个 zip 压缩包。

  2. 解压该压缩包, 解压出来的文件夹中应该有一个叫 kivy.bat 的文件,下面用来启动 kivy 应用。

启动 kivy 应用

  1. 拷贝前面提到的 kivy.bat 文件
  2. 找到系统的 sendto 目录: win7/win8 可以在资源管理器中输入 shell:sendto , winxp 下运行 sendto 即可打开
  3. 在 sendto 目录,右键以后,选择 拷贝为快捷方式 ,为了支持多版本,建议修改为带版本号的名字,比如 kivy1.7.2
  4. 最后找到 kivy 自带的例子,比如 kivy\examples\demo\showcase 下的 main.py ,右键后选择"发送到",选择刚才复制的 kivy1.7.2 ,就会打开 windows 版本的 kivy 应用。

官方文档也有双击以及命令行启动应用的介绍,这里不再详述。

把下面的代码保存为 test.py 以后,同样右键->发送到 kivy 可以运行第一个 kivy 应用:

#coding=utf8

import kivy
kivy.require('1.1.3')

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello world, I am Hick @ blog.hickwu.com')

TestApp().run()

中文显示的支持

比如修改 kivy\examples\demo\showcase\main.py

搜索下载字体 DroidSansFallback.ttf ,放在 kivy 目录比如 D:\Kivy\kivy\font ,然后把下面的内容保存为 utf-8 格式

#coding=utf8

import kivy
kivy.require('1.1.3')
import kivy.resources
kivy.resources.resource_add_path(r'D:\Kivy\kivy\font')

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text=u'我是中文', font_name=kivy.resources.resource_find("DroidSansFallback.ttf"))

TestApp().run()

以 kivy 应用方式打开即可可看大中文正常了。注意,上面的 font_name 的写法也可以是不用上面的 kivy.resources.resource_add_path 而是直接指定路径:

font_name="kivy/font/DroidSansFallback.ttf"

中文输入问题

官方的讨论组中有相关讨论: https://groups.google.com/forum/#!topic/kivy-users/y1-OD4NWPSE 。有人给出的俩链接都无法打开,循着相关关键词不知道是否有人能探究清楚:

This patch support low-level cross-platform IME mechanism.
http://sdl-im.csie.net/

And,this article in chinese talk about how to use this patch.
http://tib.tw/tBoard/index.py?m=pl&t=698

根据相关索引,Simple DirectMedia Layer 简称 SDL 应该是解决方案 http://www.libsdl.org/

Simple DirectMedia Layer is a cross-platform development library 
designed to provide low level access to audio, keyboard, mouse, 
joystick, and graphics hardware via OpenGL and Direct3D. It is 
used by video playback software, emulators, and popular games 
including Valve's award winning catalog and many Humble Bundle games.

SDL officially supports Windows, Mac OS X, Linux, iOS, and Android. 
Support for other platforms may be found in the source code.

BTW: 具体到输入这块,有个专有名词: SDL IME ,这里有文章介绍: http://hi.baidu.com/mjting/item/ecdd97eeb05b6c2d5b7cfb1b

暂时不知道怎么跟 pygame 结合。官方 wiki 没找到相关信息,论坛中搜索 pygame 有一些结果。

在 pygame 官方找 SDL 也没看到能理解的信息。不过 讨论组 里有这样的信息

2009/1/16 René Dudfield <renesd@xxxxxxxxx>:
> Hi,
>
> I don't think you can use it.  There was a patch around for IME in
> pygame...  However it wasn't a very clean patch, so we couldn't use
> it.
>
> Probably search the mailing list for details.
>
> cheers,

搜索 "pygame 中文 输入"找到这里,貌似有用: http://www.shiftsky.com/3/80 ,实际测试成功跑起了界面,但是貌似有 bug , 无法象作者截图那样的输入。

从这里看 https://groups.google.com/forum/#!topic/pygame-mirror-on-google-groups/xJnnuyvfVkQ

SDL 2.0 已经支持好了输入了: Proper unicode input and IME support 。这里有 SDL 2.0 和 pygame 结合的相关说明,不过目前为止还看不大明白,貌似是可行的: http://pysdl2.readthedocs.org/en/latest/tutorial/pygamers.html

查看更多文章
分享到:


分享到: