Kivy - 使用Python传递的值更新Canvas背景

时间:2017-01-04 14:57:46

标签: python canvas background kivy

努力从python中更新画布的图像源:

这是.KV部分:

BoxLayout:
                    orientation: "vertical"
                    padding: "5dp"
                    size_hint_y: 0.70                   
                    canvas.before:
                        Color:
                            rgb: .6, .6, .6 
                        Rectangle:
                            pos: self.pos
                            size: self.size
                            source: "image.png"

在python方面,我有一个函数返回我要传递给源的新图像名称,以便将“image.png”更新为“image2.png”

我尝试在.kv中添加ID但不幸的是它不适用于“矩形”

有什么好主意吗?

1 个答案:

答案 0 :(得分:1)

从外部可以很好地访问变量,例如内置名称(App实例为app,主规则/类为root,当前窗口小部件实例为self。 Ids将无效,因为canvas(之前,经典,之后)构建之前其他任何内容,因此您将无法在画布中访问ids你为它构建画布的小部件。

在构建画布之后,诸如id之类的东西会按照你期望的方式工作。

from kivy.app import App
from kivy.lang import Builder

kv = '''
BoxLayout:
    variable: 'blob'
    orientation: 'vertical'
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            source: app.test  # self.variable
'''


class TestApp(App):
    def build(self):
        self.test = 'path'
        return Builder.load_string(kv)


if __name__ == '__main__':
    TestApp().run()