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
相关产品推荐
相关产品推荐

