pyinstaller打包kivy的一个案列支持中文

pyinstaller打包kivy的一个案列支持中文

脚本

kivy默认不支持中文,网上有几个办法,我用了使用代码注册的方式。
找到系统的MSYH.TTC文件并放在脚本的当前目录

import os
import sys
from kivy.core.text import LabelBase


def register_font():
    # 获取字体路径
    if getattr(sys, "frozen", False):
        # 打包后的路径
        base_path = sys._MEIPASS
        font_path = os.path.join(base_path, "data", "fonts", "MSYH.TTC")
    else:
        # 开发时的路径
        font_path = os.path.join("MSYH.TTC")
    # 双重验证路径
    print(font_path)
    print(os.listdir())
    if not os.path.exists(font_path):
        raise FileNotFoundError(f"字体文件不存在于: {font_path}")
    # 注册字体
    try:
        LabelBase.register(name="Roboto", fn_regular=font_path)
        return True
    except:
        return False


# 在应用初始化时调用
register_font()

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.config import Config

# 必须在 App 创建前设置!
Config.set("kivy", "window_icon", "search.png")  # 或 .ico

kv = """
#:import SlideTransition kivy.uix.screenmanager.SlideTransition
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
#:import SwapTransition kivy.uix.screenmanager.SwapTransition
#:import WipeTransition kivy.uix.screenmanager.WipeTransition
#:import CardTransition kivy.uix.screenmanager.CardTransition

<Button>:
    background_normal: '1.png'  # 默认状态背景
    background_down: 'bg.jpg'     # 按下状态背景
    background_color: (1, 1, 0, 1)         # 背景颜色(RGBA,覆盖图片)
    color: (1, 0, 0, 1)                    # 文字颜色
    border: (10, 10, 10, 10)               # 边框圆角(左上、右上、右下、左下)


ScreenManager:
    transition: CardTransition()
    MenuScreen:
        name: 'menu'
    SettingsScreen:
        name: 'settings'

<MenuScreen@Screen>:
    BoxLayout:
        Button:
            text: 'Goto settings李习'
            on_press:
                print(root.manager.transition)
                # root.manager.transition.direction = 'down'
                root.manager.current = 'settings'
        Button:
            text: 'Quit'

<SettingsScreen@Screen>:
    BoxLayout:
        Button:
            text: 'My settings button'
        Button:
            text: 'Back to menu'
            on_press:
                print(root.manager.transition)
                # root.manager.transition.direction = 'up'
                root.manager.current = 'menu'
                print(root.manager.screens)
"""


class TestApp(App):
    def build(self):
        self.title = "我的应用"  # 修改窗口标题
        return Builder.load_string(kv)


if __name__ == "__main__":
    TestApp().run()

打包文件

# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['1.py'],
    pathex=[],
    binaries=[],
    datas=[
        ('MSYH.TTC', 'data/fonts'), ## 字体文件
        ('search.png', 'search.png'), ## 图标
        ('1.png', '1.png'), ## 按钮的背景,注意这里加进来没啥用,python这个垃圾。只有把这个文件放到打包后的exe同级目录才可以
        ('bg.jpg', 'bg.jpg') ## 同上
        ],
    hiddenimports=[
        'kivy',
        'kivy.core.text.text_sdl2',
        'pillow'
    ],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='1',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['search.png'],
)

pyinstaller --log-level WARN .\1.spec和结果展示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值