You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy中通过Python路径引用无法显示图片的问题

问题解决:Kivy绑定StringProperty不显示图片的原因及修复

核心问题

你代码里存在实例不匹配的问题:你在TrainingApp中手动创建了SingleTrainingPlan实例,但kv文件里的ScreenManager会自动生成另一个完全独立的SingleTrainingPlan实例。你调用app.singletrainingplan.show_training()修改的是手动创建的实例属性,而屏幕上实际显示的是ScreenManager管理的实例,两者完全无关,所以绑定的图片路径根本没生效。


修复步骤

1. 修改Python代码

删掉App类里手动创建的singletrainingplan属性,让ScreenManager负责所有Screen实例的创建和管理:

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.properties import StringProperty

class SingleTrainingPlan(Screen):
    path_i = StringProperty("")  # 给属性设置初始空值,避免加载报错

    def __init__(self, **kwargs):
        super(SingleTrainingPlan, self).__init__(**kwargs)

    def show_training(self, r):
        self.path_i = "training_programs/Unknown-1.jpeg"
        print(self.path_i)

class TrainingApp(App):
    # 移除手动创建的singletrainingplan实例
    pass

TrainingApp().run()

2. 修改kv文件中的按钮逻辑

通过ScreenManager的get_screen()方法获取正确的SingleTrainingPlan实例,再调用方法修改属性:

# 找到CurrentStats里的Show按钮,替换on_release内容
Button:
    text: "Show"
    color: (0, 0, 0)
    size_hint: 1, .1
    pos_hint: {"center_x": 0, "center_y": 1.33}
    on_release:
        # 通过屏幕名称获取ScreenManager管理的正确实例
        root.manager.get_screen("singletrainingplan").show_training(1)
        app.root.current = "singletrainingplan"

额外检查项

如果修复后仍不显示,确认:

  • 图片路径大小写和实际文件一致(比如Unknown-1.jpeg和unknown-1.jpeg是不同路径)
  • 图片文件确实存在于training_programs文件夹中,且该文件夹和主py文件在同一目录下

内容的提问来源于stack exchange,提问作者user18315433

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:39:51