You need to enable JavaScript to run this app. Python Kivy框架如何不修改安装文件自定义UI主题图片?
优惠活动
大模型
产品
解决方案
定价
更多

Python Kivy框架如何不修改安装文件自定义UI主题图片?

Kivy自定义主题图不修改安装目录的单文件实现方法

核心逻辑为修改Kivy资源搜索优先级,让应用优先读取你本地存放的自定义主题图,无需改动Kivy安装目录文件,也可保持单文件代码结构:

  • 将你修改好的defaulttheme-0.png文件和当前Python脚本放在同一文件夹下
  • 在代码开头导入Kivy核心模块前,插入资源路径配置代码,同时清除Kivy默认的图片缓存避免加载旧的全局主题资源

完整可运行代码

import os
import sys
import serial
# 配置Kivy资源搜索路径,优先读取当前脚本目录下的资源
from kivy import resources
resources.resource_add_path(os.path.dirname(os.path.abspath(sys.argv[0])))
# 清除主题缓存,强制加载新的自定义主题图
from kivy.graphics import stencil
stencil.Clear()
from kivy.core.image import ImageLoader
ImageLoader.clear_cache()

from kivy.app import App
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.boxlayout import BoxLayout

from kivy.core.window import Window
Window.size = (400, 100)

class R(App):
  def build(self):
    def pstate(PBTN,state):
      # serial communication
      print("P "+PBTN.state)
      
    def lstate(LBTN,state):
      # serial communication
      print("L "+LBTN.state)  
      
    PBTN = ToggleButton(text = 'P',
                        font_size=20,
                        state='down')
    PBTN.bind(state=pstate)
    
    LBTN = ToggleButton(text = 'L',
                        font_size=20,
                        state='down')
    LBTN.bind(state=lstate)
    
    b = BoxLayout(orientation='horizontal')
    b.add_widget(PBTN)
    b.add_widget(LBTN)
    return b
  
if __name__ == "__main__":
    R().run()

补充说明

该方案完全不影响全局Kivy的配置,其他Kivy应用仍会使用默认主题,如果你后续需要打包为exe分发,只需要把defaulttheme-0.png和生成的exe放在同一目录即可正常生效,不需要额外修改打包配置。

内容的提问来源于stack exchange,提问作者Martynas Žiemys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 18:06:09