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

Kivy开发:如何修改KV文件定义的控件图片源?

解决Kivy动态修改Rectangle图片源的问题

你的问题根源是没有将RectBlock类的属性与kv文件中Rectangle的source做绑定,直接修改block.source无法关联到画布上的矩形控件。按以下步骤调整即可解决:

1. 给RectBlock添加可绑定的source属性

在Python代码中为RectBlock添加StringProperty类型的source属性,这是Kivy实现属性绑定的基础:

from kivy.properties import StringProperty

class RectBlock(Widget):
    source = StringProperty('dog.png')  # 初始图片设为dog.png
    def __init__(self, **kwargs):
        super(RectBlock, self).__init__(**kwargs)

2. 在kv文件中绑定属性

修改kv代码,将Rectangle的source绑定到RectBlock的source属性:

<RectBlock>:
    canvas:
        Rectangle
            size: 65, 90
            pos: self.pos
            source: self.source  # 绑定到类的source属性
<MyWidget>:

3. 正确修改图片源

现在直接给block.source赋值图片路径字符串即可,不需要创建Image对象:

self.block.source = 'cat.png'

额外修正:MyWidget代码的语法问题

你当前MyWidget的代码存在缩进错误,block的定义应该放在__init__方法内部:

class MyWidget(Widget): 
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        self.block = RectBlock(pos=(140,150))
        self.add_widget(self.block)

完成以上修改后,运行程序就能成功将图片从dog.png切换为cat.png了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:34:57