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

Mor*_*rtz 5 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()
Run Code Online (Sandbox Code Playgroud)

这是我的 kv 文件

<MyWidget@Widget>:
    canvas:
        Color:
            rgba: 1, 0, 0, 1.0
        Rectangle:
            size: self.size
            pos: self.pos
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种情况?我怎样才能从Python设置背景颜色?我在 Linux 机器上使用 Python 2.7

inc*_*ent 5

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