Python 如何在TabbedPanelItem中动态地将小部件添加到GridLayout

Python 如何在TabbedPanelItem中动态地将小部件添加到GridLayout,python,kivy,Python,Kivy,我正在开发一个应用程序,它将顺序地将标签和复选框添加到一个GridLayout中,该GridLayout本身就位于TabbedPanelItem中。有两个选项卡式面板项将保持静态,我希望创建第三个选项卡式面板项,其内容由本地数据库提供 我不知道如何使用python创建这个新的TabbedPanelItem,而不必重新创建整个屏幕 我有一个类Screen2(Screen),它(我认为)控制着Kivy的输出。我的问题是,我似乎无法访问选项卡面板,每次我添加一个小部件时,它都会覆盖在整个应用程序上,而

我正在开发一个应用程序,它将顺序地将标签和复选框添加到一个GridLayout中,该GridLayout本身就位于TabbedPanelItem中。有两个选项卡式面板项将保持静态,我希望创建第三个选项卡式面板项,其内容由本地数据库提供

我不知道如何使用python创建这个新的TabbedPanelItem,而不必重新创建整个屏幕

我有一个类Screen2(Screen),它(我认为)控制着Kivy的输出。我的问题是,我似乎无法访问选项卡面板,每次我添加一个小部件时,它都会覆盖在整个应用程序上,而我希望将它放在新选项卡的内容中

<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"


下面的解决方案演示了如何访问
TabbedPanel
,并在Python脚本中动态添加一个新的
TabbedPanelItem

kv文件
  • id:tp
    添加到
    选项卡面板:
片段 输出

这正是我想要的,谢谢!我想我在试着预先付账时有点超前了。切换屏幕时如何调用此函数?在kv文件中,假设Screen2有一个
名称:“Screen2”
,那么最好是将该功能附加到按钮上,还是有办法在切换屏幕时调用该功能。切换屏幕后,使用
root.manager.get\u screen('screen2').create\u dyn\u tab()
访问方法
create\u dyn\u tab()
。我在init方法中调用了它。这被认为是坏习惯吗?这似乎是可行的,但我在OOP方面没有很强的背景,不知道什么被认为是不正确的。将它放在
init
classscreen2
的构造函数方法中并不是一个坏做法。实例化对象时,它总是调用
init
方法。
<Screen2>:
    tp: tp

    FloatLayout:

        TabbedPanel:
            id: tp
            do_default_tab: False
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())