如何从KV文件更改源图像

0 投票
1 回答
33 浏览
提问于 2025-04-12 07:40

我想创建一个简单的矩形小部件,并且想要显示一张图片。当我运行这个程序时,当然会在屏幕上看到这张图片。但是如果我在.py文件里想把这张图片换成别的,比如从狗换成猫,我就不知道该怎么做了。

<RectBlock>:
    canvas:
        Rectangle
            size: 65, 90
            pos: self.pos
            source: 'dog.png' 
<MyWidget>:


class RectBlock(Widget):
    def __init__(self, **kwargs):
      super(RectBlock, self).__init__(**kwargs)

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

我以为这事情会像下面这样简单:

block.source = Image('cat.png') 

结果什么都没变,还是显示着狗的图片。

1 个回答

0

我明白你的问题。你希望在使用应用程序时,图片能够“刷新”,也就是说如果源文件发生变化,显示在小部件上的图片也要跟着变化。其实没有什么“奇迹公式”,这两个文件必须要有相同的名字。让我来解释一下:我们把图片“dog.png”的名字改成animal.png,同时把“cat.png”的名字也改成animal.png。当你用一个文件替换另一个文件时,虽然名字保持不变,但数据是不同的,这样Kivy就会自动识别文件内容发生了变化,并刷新图片。但要做到这一点,这两个文件的名字必须是一样的。如果我说得不清楚,请告诉我,我可以再解释一遍。

撰写回答