首页 > 其他 > 详细

Kivy中显示汉字的问题

时间:2020-05-27 12:45:49      阅读:56      评论:0      收藏:0      [点我收藏+]

1. kivy中显示中文乱码和提示错误的原因:

  • 编码问题
  • 字体问题

2. 字体问题的解决

可以下载支持中文的字体文件ttf,我这里使用了微软雅黑中文简体msyh.ttf。我们在编写布局时可以直接在相关控件上指定字体类型

# 在py文件中的使用方式:
btn = Button(text=我的世界, font_name=msyh.ttf)

在kv文件中的使用方式:

Button:
    text: 我的世界
    font_name: msyh.ttf

但是这种方式很显然是不可取的,因为有一个控件,就得为其指定字体类型名称。我们想在程序运行时就加载注册好字体类型,这就需要用到kivyLabelBase来提前注册好字体类型

from kivy.core.text import LabelBase
LabelBase.register(name=Font_Hanzi,fn_regular=./fonts/msyh.ttf)

注册后如何使用呢?

# py文件中:
btn = Button(text=我的世界, font_name=Font_Hanzi)
# kv文件中:
Button:
    text: 我的世界
    font_name: Font_Hanzi

看起来是不是并没有减少代码量,其实不然,这样为程序提供了一个统一的变量供所有控件使用,方便很多了。

3. 解码报错问题

解码报错问题主要出现在py文件去读取kv文件的过程中,提示的错误类似UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xba in position 171: illegal multibyte sequence,报这个错误的原因很简单,就是主程序读取kv文件时的编码问题。

class ClockApp(App):
    def build(self):
        return Builder.load_file(./kvs/clock.kv)

Builder.load_file(‘./kvs/clock.kv‘)这个方法是有问题的,那么如果解决问题呢?

我们可以直接查看源码

def load_file(self, filename, **kwargs):
    filename = resource_find(filename) or filename
    if __debug__:
        trace(Lang: load file %s % filename)
    # 问题就出在open()方法上,它没有指明具体的编码格式
    with open(filename, r) as fd:
        kwargs[filename] = filename
        data = fd.read()
        ...

问题找到了,解决问题的方法就是直接改源代码,在open()方法中加入encoding=‘utf-8‘关键字参数即可。

def load_file(self, filename, **kwargs):
    filename = resource_find(filename) or filename
    if __debug__:
        trace(Lang: load file %s % filename)
    # 在open()方法中指明编码方式为utf-8
    with open(filename, r, encoding=utf-8) as fd:
        kwargs[filename] = filename
        data = fd.read()
        ...

4. 效果

技术分享图片

Kivy中显示汉字的问题

原文:https://www.cnblogs.com/toomax/p/12971810.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!