Как динамически добавлять виджеты в GridLayout внутри TabbedPanelItem - PullRequest
1 голос
/ 30 апреля 2019

Я работаю над приложением, которое будет последовательно добавлять метки и флажки в GridLayout, который находится внутри TabbedPanelItem. Есть два элемента TabbedPanelItems, которые останутся статическими, и я хочу создать третий, содержимое которого поступает из локальной базы данных.

Я не уверен, как я могу создать этот новый TabbedPanelItem с python, не создавая заново весь экран.

У меня есть класс Screen2 (Screen), который (я думаю) контролирует вывод из Kivy. Моя проблема в том, что я не могу получить доступ к TabbedPanel, и каждый раз, когда я добавляю виджет, он накладывается на все приложение, тогда как я хочу вместо этого иметь его в содержимом новой вкладки.

<Screen2>:

    FloatLayout:

        TabbedPanel:
            do_default_tab: False

            TabbedPanelItem:
                text: "TAB 1"

                BoxLayout:
                    orientation: 'vertical'
                    id: info

                    ScrollView:

                        GridLayout:
                            id: container
                            cols: 2
                            size_hint_y: 1
                            padding : 30,30
                            spacing: 10, 10
                             .
                             .
                             .
            TabbedPanelItem:
                text: "TAB2"

class Screen2(screen):
    def create_dyn_tab(self):
        panel = TabbedPanel()
        menuTab = TabbedPanelHeader(text="Menu")
        panel.add_widget(menuTab)

        menuContent = []

        menuTab.content = ScrollView(GridLayout(cols=2))


1 Ответ

0 голосов
/ 30 апреля 2019

В следующем решении показано, как получить доступ к TabbedPanel и динамически добавить новый TabbedPanelItem в скрипте Python.

kv файл

  • Добавить id: tp в TabbedPanel:

Фрагменты

<Screen2>:
    tp: tp

    FloatLayout:

        TabbedPanel:
            id: tp
            do_default_tab: False

py file

  • Инициировать ScrollView виджет и присвоить его переменной, sv
  • Назначенный инициированный ScrollView виджет content из menuTab
  • Добавление GridLayout в качестве дочернего элемента ScrollView

Фрагменты

def create_dyn_tab(self):
    menuTab = TabbedPanelHeader(text="Menu")
    self.tp.add_widget(menuTab)
    sv = ScrollView()
    menuTab.content = sv
    container = GridLayout(cols=2)
    sv.add_widget(container)
    for i in range(8):
        container.add_widget(Label(text='Label'+str(i)))
        container.add_widget(CheckBox())

Выход

Result

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