使用kv文件和python类初始化窗口小部件之间的区别

时间:2014-11-13 17:41:39

标签: python kivy

我正在学习如何用Kivy创建一个应用程序,当我使用Python与kv语言时,我看到应用程序看起来不同。

我要做的是让背景变成红色。 当我使用Python时,我会在左下角看到一个小红框(可能是默认的100px kivy小部件大小)。 当我使用kv文件时,我得到整个背景为红色

这是我的python代码 -

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import *

class MyWidget(Widget):
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        with self.canvas:
            Color(1,0,0,1)
            Rectangle(size = self.size, pos = self.pos)


class MyWidgetApp(App):
    def build(self):
        x = MyWidget()
        return x
        pass

if __name__ == "__main__":
    MyWidgetApp().run()

这是我的kv文件

<MyWidget@Widget>:
    canvas:
        Color:
            rgba: 1, 0, 0, 1.0
        Rectangle:
            size: self.size
            pos: self.pos

为什么会这样?如何从Python设置背景颜色? 我在Linux机器上使用Python 2.7

1 个答案:

答案 0 :(得分:3)

问题是kv会自动进行绑定以更新红色矩形的位置和大小,而python则不会(并且不能)。您必须使用bind方法来创建自己的绑定。我有一篇关于这个here的博客文章 - 巧合的是,它恰好解决了你的例子。