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

