Python 添加kivy自定义小部件只会添加第一个布局

Python 添加kivy自定义小部件只会添加第一个布局,python,kivy,Python,Kivy,我正在尝试为列表中的每个项目添加一个自定义小部件。 第一个布局很好,但在第一个布局之后,只显示第一个布局。(黄色广场) 我已经尝试将_widget(Builder.load_)字符串添加到整个自定义小部件中,得到了相同的结果 引用自定义小部件的布局类: 类别股票组合(浮动布局): 通过 用于添加小部件的函数: 投资组合列表=[1,2,3] def添加股票组合(自我、布局): layout.clear_widgets() 对于self.portfolio_列表中的i: layout.add_小

我正在尝试为列表中的每个项目添加一个自定义小部件。 第一个布局很好,但在第一个布局之后,只显示第一个布局。(黄色广场)

我已经尝试将_widget(Builder.load_)字符串添加到整个自定义小部件中,得到了相同的结果

引用自定义小部件的布局类:

类别股票组合(浮动布局):
通过
用于添加小部件的函数:


投资组合列表=[1,2,3]
def添加股票组合(自我、布局):
layout.clear_widgets()
对于self.portfolio_列表中的i:
layout.add_小部件(StockPortfolio())
以及自定义窗口小部件的开头:

<StockPortfolio@FloatLayout>
    id: stockportfolio
    size_hint: None, None
    height: app.root.height * .18
    width: app.root.width -10
    canvas:
        Color:
            rgba: .98, .98, 0, .5
        Rectangle:
            size: self.size
            pos: self.pos
    Button:
        background_normal: ''
        background_down: ''
        background_color: [0, 0, 0, 0]
        pos: 5, 5
        on_release:
            app.go_screen(4)
            app.load_popup2()
            app.update_current(portfolioticker1.text, portfoliocompany.text)
    BoxLayout:
        orientation: "vertical"
        pos: 5, 5
        size_hint: None, None
        height: app.root.height * .18
        width: app.root.width -10
        canvas:
            Color:
                rgba: .98, .98, .98, 1
            Rectangle:
                size: self.size
                pos: self.pos

id:股票组合
大小提示:无,无
高度:app.root.height*.18
宽度:app.root.width-10
画布:
颜色:
rgba:.98,98,0,5
矩形:
大小:self.size
pos:self.pos
按钮:
背景\u正常:“”
背景设置已关闭:“”
背景颜色:[0,0,0,0]
位置:5,5
发布时:
应用程序go_屏幕(4)
app.load_popup2()
当前应用程序更新(portfolioticker1.text,portfoliocompany.text)
盒子布局:
方向:“垂直”
位置:5,5
大小提示:无,无
高度:app.root.height*.18
宽度:app.root.width-10
画布:
颜色:
rgba:.98、.98、.98、1
矩形:
大小:self.size
pos:self.pos
问题
  • 在Kivy应用程序中,有两个不同的
    StockPortfolio()
    类。kv文件中声明的一个是动态类,而Python脚本中声明的另一个是类规则。动态类不需要Python脚本中的实现
  • StockPortfolio
    添加的对象堆叠在一起
  • 解决方案
  • 在kv文件中,通过删除
    @FloatLayout
    将动态类更改为类规则
  • 提供按钮的大小
  • 为添加到布局中的每个股票组合提供新位置
  • 代码片段-kv文件
    问题
  • 在Kivy应用程序中,有两个不同的
    StockPortfolio()
    类。kv文件中声明的一个是动态类,而Python脚本中声明的另一个是类规则。动态类不需要Python脚本中的实现
  • StockPortfolio
    添加的对象堆叠在一起
  • 解决方案
  • 在kv文件中,通过删除
    @FloatLayout
    将动态类更改为类规则
  • 提供按钮的大小
  • 为添加到布局中的每个股票组合提供新位置
  • 代码片段-kv文件

    非常感谢您的回答,并解释了这两个类之间的区别。我按照您的解决方案解决了这个问题,并给了我的自定义小部件类的子类一个root.pos引用,以防止它们相互堆叠。现在它们按预期对齐。谢谢!非常感谢您的回答和解释这两个类之间的差异。我按照您的解决方案解决了这个问题,并为我的自定义小部件类的子类提供了一个root.pos引用,以阻止它们相互堆叠。现在它们已按预期对齐。谢谢!
    <StockPortfolio>: