Добавление пользовательского виджета KIVY добавляет только первый макет - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь добавить пользовательский виджет для каждого элемента в списке. Первый работает нормально, но каждый после первого отображается только первый макет. (желтый квадрат)

Я уже пытался добавить add_widget (Builder.load_string весь пользовательский виджет, что привело к тому же результату.

Класс Layout, на который ссылается пользовательский виджет:

class StockPortfolio(FloatLayout):
    pass

Функция добавления виджетов:


    portfolio_list = [1, 2, 3]

    def add_stock_portfolio(self, layout):
        layout.clear_widgets()
        for i in self.portfolio_list:
            layout.add_widget(StockPortfolio())

И начало пользовательского виджета kv:

<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

1 Ответ

0 голосов
/ 03 июля 2019

Проблемы

  1. В вашем приложении Kivy есть два разных класса StockPortfolio().Один, объявленный в файле kv, является динамическим классом, тогда как другой, объявленный в скрипте Python, является классом Rule.Динамический класс не требует реализации в скрипте Python.
  2. StockPortfolio добавленные объекты накладываются друг на друга.

Решение

  1. Вв файле kv измените класс Dynamic на правило класса, удалив @FloatLayout.
  2. Укажите размер кнопки
  3. Укажите новую позицию для каждого портфеля акций, добавленного в макет.

Snippets - файл kv

<StockPortfolio>:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...