选项卡中的滚动视图 kivy/KivyMD

ScrollView in Tabs kivy/KivyMD

问题已更新

我有一个代码:

from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivymd.app import MDApp
from kivymd.uix.tab import MDTabsBase

KV = '''
BoxLayout:
    orientation: "vertical"

    MDToolbar:
        left_action_items: [["menu", lambda x: x]]
        title: "Smart home & its components"

    MDTabs:
        id: tabs
        on_tab_switch: app.on_tab_switch(*args)
        Tab:
            text: 'Smart home'
            FitImage:
                source: 'smarthome.png'
        Tab:
            text: 'Smart garage'
            ScrollView:
                do_scroll_x: False
                FitImage:
                    size_hint: (None, None)
                    size: root.size
                    source: 'garage.jpg'
                Button:
                    size_hint: (None, None)
                    size: (100, 100)
                Button:
                    size_hint: (None, None)
                    size: (100, 100)


<Tab>:
'''


class Tab(FloatLayout, MDTabsBase):
    pass


class Example(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_tab_switch(self, instance_tabs, instance_tab, instance_tab_label, tab_text):
        pass


Example().run()

'''


class Tab(FloatLayout, MDTabsBase):
    pass


class Example(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_tab_switch(self, instance_tabs, instance_tab, instance_tab_label, tab_text):
        pass


Example().run()

部分代码:

Button:
    size_hint: (None, None)
    size: (100, 100)
Button:
    size_hint: (None, None)
    size: (100, 100)
            

当我 运行 没有这部分的代码时,我在第二个选项卡中得到可滚动的图像,但是当我 运行 有这部分代码的代码时,我得到错误。
错误:

Exception: ScrollView accept only one widget

我明白为什么我会出错并且 ScrollView 只接受一个小部件,但如果可能的话,如何将按钮放在我的可滚动图像下?
谢谢你

from kivy.lang import Builder
from kivy.properties import StringProperty

from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.label import MDLabel
from kivymd.uix.tab import MDTabsBase

KV = '''
MDBoxLayout:
    orientation: "vertical"

    MDToolbar:
        title: "Example Tabs Toolbar"

    MDTabs:
        id: tabs
        on_tab_switch: app.on_tab_switch(*args)
        
        Tab:
            text: 'Smart home'
            source: 'image.png'
                
        Tab:
            text: 'Smart garage'
            source: 'image.png'

<Tab>:
    orientation: "vertical"

    FitImage:
        source: root.source

    ScrollView:
    
        MDList:
            id: box

'''


class Tab(MDBoxLayout, MDTabsBase):
    source = StringProperty()


class Example(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        self.root.ids.tabs.switch_tab('Smart garage')

    def on_tab_switch(self, instance_tabs, instance_tab, instance_tab_label, tab_text):
        instance_tab.ids.box.clear_widgets()
        for i in range(20):
            instance_tab.ids.box.add_widget(
                MDLabel(text=f"Text {i}", halign="center")
            )


Example().run()
ScrollView:
    do_scroll_x: False
    
    MDList:
    
        FitImage:
            size_hint: (None, None)
            size: root.size
            source: 'garage.jpg'
        Button:
            size_hint: (None, None)
            size: (100, 100)
        Button:
            size_hint: (None, None)
            size: (100, 100)