我是如何搞定kivy的中文显示!

本文介绍了如何在kivy中显示中文,包括在Linux和macOS系统下配置中文字体的详细步骤,强调了字体的版权问题,并提供了配置文件的修改方法。

kivy是python可以编写手机应用程序的唯一模块。刚刚接触的时候,听到赞同的声音和反对的声音几乎一样多,更奇葩的是官网上面明明说python 3.0是完全支持的,结果居然有太多的声音也是否定的,最后当我按照官方网站上面的安装指导安装成功之后才发现这些所谓的反对声音往往饱含着浮躁之气。
作为一名医生,原本没有太多的时间在临床工作之外还要学习编程,但是当自己面临一个简单的九种体质问卷表,花了5千元人民币,还要苦苦等上32天,得到程序之后,发现非常的业余,还不如自己做的excel表格,又居然被告知要定制,需要10倍的的价格……虽然已经不惑之年,但寻找能沉下心来细细的品味代码的程序员已经太少,不知多少次,花了不少冤枉钱,请人写出来的都是一些充斥着太多无用功能或者多余功能的模块所拼凑的四不像……知耻而后勇,痛定思痛,与其教授一位心高气傲的人类认真的理解算法的精髓,用计算机的语言表达出来,不如自己好好的学会和计算机沟通,至少它没有情绪,至少沟通不需要重复。既然,人体的构造,疾病的转归都能学会,相信计算机也是可以很好的沟通的。在朋友的推荐下,我选择了python,的确比起在青年时给我编程糟糕体验,甚至说真是因为这样的糟糕体验而使我几十年不愿意再碰编程的C语言而言,感受太棒了,只要不受那些“唯快不破”的狂言所影响,python可以让你做任何你想要计算机做的任何事情,小到单片机,大到航天飞机(买了之后,试试)都是它的天下,虽然据说达不到所谓工业化标准,但是我想用来构画一个原形够了,毕竟需要工业化的时候,也是有大堆的银子可以用,可以请大把大把程序员团队来写,照葫芦画瓢,不用再被无法沟通气的七窍冒烟。
kivy和python3.0完美融合,我之前已经说过,绝对没有只支持2.0的谣言。那么kivy是否支持中文?当然,只要安装了中文字体,并且修改配置文件就可以了。步骤很简单:
1 下载中文字体:我选择了“思源宋体”,因为这种字体是可以免费行业使用的,这样的话,生成的手机软件就不会因为字体侵权。
下载的文件放到你的安装目录里面,我的kivy的安装目录是:
/home/你自己的用户名/anaconda3/lib/python3.7/site-packages/Kivy-1.11.0-py3.7-linux-x86_64.egg/kivy/data

非常感谢你的澄清!你描述的问题非常明确: > 在 Kivy 中,当按钮文本中的感叹号 `!` 增多时,比如写成 `'Hello Kivy!!!'`,程序就会在 Android 上闪退。 这个问题看起来像是一个**编码或字体渲染问题**。我们来深入分析和解决它。 --- ## 🔍 问题分析 ### ✅ 代码本身没有语法错误 以下代码在桌面端可以正常运行: ```python from kivy.app import App from kivy.uix.button import Button class MyApp(App): def build(self): return Button(text='Hello Kivy!!!') if __name__ == '__main__': MyApp().run() ``` 但你提到: - `text='Hello Kivy!'` ✅ 可以正常运行 - `text='Hello Kivy!!!'` ❌ 闪退(特别是在 Android 上) --- ## 🧠 可能的原因 ### 1. **Android 上字体支持某些字符(如中文、全角符号)** 当你使用了**全角的感叹号 `!!!`**(而是半角的 `!!!`)时,Kivy 可能无法正确渲染这些字符,导致崩溃。 #### ✅ 区别如下: - 半角感叹号:`!`(ASCII字符,安全) - 全角感叹号:`!`(Unicode字符,可能被默认字体支持) > 在 Android 上,Kivy 默认使用的是 `DejaVu` 或 `Roboto` 字体,可能包含某些全角符号。 --- ### 2. **Python 字符编码问题** 如果你的源文件保存为非 UTF-8 编码,可能会导致 Android 上解析失败。 > KivyLauncher 使用的 Python 环境对编码支持有限,**必须确保你的 `.py` 文件是 UTF-8 编码**。 --- ### 3. **KivyLauncher 的 Python 环境限制** KivyLauncher 使用的是一个简化版的 Python for Android(Pygame subset),它对 Unicode、字体、渲染的支持有限,**某些字符会导致它直接崩溃**。 --- ## ✅ 解决方案 ### ✅ 方法一:只使用半角符号和标准字符 如果你只是想测试,可以先将文本改为: ```python return Button(text='Hello Kivy!!!') # 使用半角 ! 号 ``` 看看是否还闪退。 --- ### ✅ 方法二:使用英文引号和英文输入法输入符号 确保你在写字符串时: - 使用英文输入法 - 使用英文的 `"` 或 `'` - 使用英文的 `!` 符号 --- ### ✅ 方法三:指定支持 Unicode 的字体 你可以显式指定一个支持 Unicode 的字体,比如 `DroidSans.ttf`,这样可以支持更多字符。 ```python from kivy.app import App from kivy.uix.button import Button from kivy.core.text import LabelBase # 注册支持中文/Unicode 的字体 LabelBase.register(name='Roboto', fn_regular='Roboto-Regular.ttf') class MyApp(App): def build(self): return Button( text='Hello Kivy!!!', font_name='Roboto', # 使用指定字体 font_size=30 ) if __name__ == '__main__': MyApp().run() ``` > 注意:你必须确保字体文件 `Roboto-Regular.ttf` 存在于你的项目目录中,或者使用 Android 上已有的字体路径。 --- ### ✅ 方法四:确保 `.py` 文件是 UTF-8 编码格式 在桌面端用文本编辑器(如 VS Code)打开你的 `.py` 文件,检查编码格式: - 点击右下角的编码(如 `UTF-8` 或 `GBK`) - 如果是 UTF-8,选择“另存为”并选择 UTF-8 编码 --- ## ✅ 总结:你应该检查的 5 个关键点 | 检查项 | 是否满足 | |--------|----------| | 是否使用了全角 `!` 而是半角 `!`? | ✅ | | 是否使用了英文输入法? | ✅ | | 是否显式指定了支持 Unicode 的字体? | ✅ | | `.py` 文件是否是 UTF-8 编码? | ✅ | | 是否使用 Pydroid3 或 Buildozer 测试? | ✅ | ---
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值