Python kivy-Bind按钮生成额外的小部件实例?

Python kivy-Bind按钮生成额外的小部件实例?,python,button,widget,kivy,Python,Button,Widget,Kivy,我已经创建了两个可以调整大小的Scatter小部件,我正在寻找一种方法,每次按下一个按钮时生成更多Scatter小部件(可能最多20个)。我试图编写一个addfunction()并将其绑定到按钮,但它似乎不起作用 我正在寻找一种方法,在出现提示时生成scatter小部件的新实例(以及子小部件Drawer,它有一个canvas以显示其占用的空间) 以下是我的python代码: from kivy.app import App from kivy.uix.widget import Widget

我已经创建了两个可以调整大小的
Scatter
小部件,我正在寻找一种方法,每次按下一个按钮时生成更多
Scatter
小部件(可能最多20个)。我试图编写一个
addfunction()
并将其绑定到
按钮
,但它似乎不起作用

我正在寻找一种方法,在出现提示时生成
scatter
小部件的新实例(以及子小部件
Drawer
,它有一个
canvas
以显示其占用的空间)

以下是我的python代码:

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

from kivy.uix.scatter import Scatter
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button

class Scatterer(Scatter):
    pass
class Drawer(FloatLayout):
    pass
class MainWindowWidget(FloatLayout):
    def addfunction(*args):
        root = MainWindowWidget()

        s = Scatterer()
        d = Drawer()

        root.add_widget(s)
        s.add_widget(d)
        print("button is pressed")

class TestApp(App):
    def build(self):

        return MainWindowWidget()

if __name__ == '__main__':
    TestApp().run()
和我的.kv文件:

#:kivy 1.0.9

<MainWindowWidget>

    Scatterer:
        id: scatter2
        size: 80, 80
        Drawer:
            size: scatter2.size 
    Scatterer:
        id: scatter1
        size: 80, 80
        Drawer:
            size: scatter1.size 
    Button:
        text: 'press'
        size_hint: None, None
        size: 100, 100
        pos: 100, 0

        on_release: root.addfunction()
<Scatterer>:
    do_rotation: False
    size_hint: None, None
    size: self.size

    canvas.after:
        Color:
            rgba: 1, 1, 0, 0.5
        Rectangle:
            size: self.size
            pos: self.pos

<Drawer>:
    size: self.size
    canvas:
        Color:
            rgba: 0, 1, 0, 0.3
        Rectangle:
            pos: self.pos
            size: self.size
#:kivy 1.0.9
散射体:
id:scatter2
尺码:80,80
出票人:
尺寸:散射2.5毫米
散射体:
id:scatter1
尺码:80,80
出票人:
尺寸:散射1.5毫米
按钮:
文字:“新闻”
大小提示:无,无
尺码:100100
位置:100,0
发布时:root.addfunction()
:
do_旋转:错误
大小提示:无,无
大小:self.size
在下列情况之后:
颜色:
rgba:1,1,0,0.5
矩形:
大小:self.size
pos:self.pos
:
大小:self.size
画布:
颜色:
rgba:0,1,0,0.3
矩形:
pos:self.pos
大小:self.size
root=MainWindowWidget()

您的问题是您编写了这个,然后将新的散点添加到
,但是再也不会对根做任何操作,因此它永远不会显示出来

您不想将散射体添加到新的MainWindowWidget,而是要添加到当前的一个,其方法正在运行以生成新的散射体。因此,将方法的声明替换为

def addfunction(self, *args):


    s = Scatterer()
    d = Drawer()

    self.add_widget(s)
    s.add_widget(d)
    print("button is pressed")

谢谢,这很有效,但是
d.size
1,1
,所以我必须添加
s.size=80,80
d.size=s.size
,才能得到我想要的