Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 浮动布局使用Kivy添加自定义大小的小部件_Python_Python 3.x_Kivy - Fatal编程技术网

Python 浮动布局使用Kivy添加自定义大小的小部件

Python 浮动布局使用Kivy添加自定义大小的小部件,python,python-3.x,kivy,Python,Python 3.x,Kivy,我不熟悉python和kivy,我正在尝试通过制作一个小部件来学习: Main.py文件: class start(App): def build(self): return Holder() if __name__ == '__main__': start().run() 代码: 问题是,虽然我添加了两个不同位置的单元格,但我仍然将它们重叠,并且它们都只显示在角落 你能让我知道我哪里出错了吗 编辑: 我已将Cell的代码更新如下: class Cell(W

我不熟悉python和kivy,我正在尝试通过制作一个小部件来学习:

Main.py文件:

class start(App):
    def build(self):
        return Holder()

if __name__ == '__main__':
    start().run()
代码:

问题是,虽然我添加了两个不同位置的单元格,但我仍然将它们重叠,并且它们都只显示在角落

你能让我知道我哪里出错了吗

编辑: 我已将Cell的代码更新如下:

class Cell(Widget):
    rect=Rectangle(size=(50, 50))
    def __init__(self, **kwargs):
        super(Cell,self).__init__(**kwargs)
        self.canvas.add(Color(1, 0, 0))
        self.canvas.add(self.rect)
        self.bind(pos=self.callback_pos)

    def callback_pos(self, value):
        self.rect.pos=self.pos
但是,现在我收到的错误是“TypeError:callback_pos()接受2个位置参数,但给出了3个”

您的绘图代码是

with self.canvas:
            Color(1, 0, 0)
            Rectangle(size=(50, 50))
…这正是您看到的,两个矩形都有大小(50,50),并且都处于默认位置(0,0),因为您没有设置它

如果您希望矩形显示为小部件的大小和形状,您必须自己绑定该矩形-即,保留对矩形的引用,并使用小部件
bind
方法调用函数,该函数在小部件位置发生变化时更新其位置

这有点冗长,这也是我们推荐使用kv语言的原因之一——它可以为您做到这一点

<Cell>:
    canvas:
        Color:
            rgb: 1, 0, 0
        Rectangle:
            pos: self.pos
            size: 50, 50
您应该将这一行放在
\uuuu init\uuuuu
中,这样它将向每个实例传递相同的矩形,因为它是一个类级变量。这实际上可能不会崩溃,也不会在这里起作用,但这不是你的意思,而且出于这个原因,这可能是一种不好的做法

但是,现在我收到的错误是“TypeError:callback_pos()接受2个位置参数,但给出了3个”


您有参数
self,value
。绑定(以及所有kivy属性绑定)实际上使用
self、instance、value
调用。只需添加这个额外的参数(或者用
*args
)就可以了。

我已经更新了代码,但仍然是一样的,我没有在这里使用KV lang,我只是编写了代码,并添加了新的代码来提问,你能纠正我吗。看到你的网站,不仅有视频,还有文章会很棒
<Cell>:
    canvas:
        Color:
            rgb: 1, 0, 0
        Rectangle:
            pos: self.pos
            size: 50, 50
rect=Rectangle(size=(50, 50))