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