zoukankan      html  css  js  c++  java
  • Kivy中显示汉字的问题

    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. 效果

  • 相关阅读:
    github release 文件下载贼慢,干脆失败的解决方法
    windows 下sublime text 3 配置python 环境详解
    Ubuntu下安装并使用sublime text 3(建议:先安装Package controls 后在看本教程,否则可能会安装不了)
    将博客搬至CSDN
    signalr core客户端通过ssl连接服务的方式
    解决html导出pdf中文乱码问题的正确姿势
    记一次asp.net core 在iis上运行抛出502.5错误
    Elasticsearch 集群搭建
    bower私服部署
    体验Code::Blocks下的Windows GUI编程(32 bit and 64 bit)
  • 原文地址:https://www.cnblogs.com/toomax/p/12971810.html
Copyright © 2011-2022 走看看