如何在 Kivy 的滚动视图顶部创建一个固定按钮?

How to create a fixed button on top of a scrollview in Kivy?

我正在寻找一种解决方案来在不随滚动移动的滚动视图顶部创建一个按钮。到目前为止,我尝试过的所有操作都会在滚动下方或内部创建按钮。

这是一些代码。 我正在尝试使 MDRaiSedButton 位于 ScrollView 之上,并且即使在用户滚动时也保持在该位置。

有点像在 HTML 中使用 position: fixed;

的标签

Python:

from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.list import ImageLeftWidget
from kivymd.uix.list import TwoLineAvatarListItem


sm = ScreenManager()

class MainScreen(Screen):
    def AddToList(self):
        item = TwoLineAvatarListItem(text='@name', id='id')
        item.add_widget(ImageLeftWidget(source='src/avatars/cropped-Avatar-Round.png'))
        self.ids.container.add_widget(item)
        print("+1")

class MainApp(MDApp):
    info = {}
    def build(self):
        self.root_widget = Builder.load_file('test.kv')
        return self.root_widget

if __name__ == '__main__':
    MainApp().run()

基维:

ScreenManager:
    MainScreen:

<MainScreen>:
    name:'main_screen'

    MDRaisedButton:
        text: "add"
        pos_hint:{"center_x":.5, "center_y":.5}
        index:10
        on_release:
            root.AddToList()
  
    ScrollView:
        do_scroll_x: False
        do_scroll_y: True
        index:5
    
        GridLayout:
            index:5
            cols: 1
            padding: 10
            spacing: 10
            # size_hint: None, None
            size_hint_x: 1
            size_hint_Y: None
            do_scroll_x: False
            id: container

为了使 Button 位于 ScrollView 的“顶部”,您只需确保它绘制在 ScrollView 之后。为此,您可以将 kv 中的 Button 移动到 ScrollView:

之后
<MainScreen>:
    name:'main_screen'

    ScrollView:
        do_scroll_x: False
        do_scroll_y: True
        index:5
    
        GridLayout:
            index:5
            cols: 1
            padding: 10
            spacing: 10
            # size_hint: None, None
            size_hint_x: 1
            size_hint_y: None
            do_scroll_x: False
            height: self.minimum_height
            id: container
            
    MDRaisedButton:
        text: "add"
        pos_hint:{"center_x":.5, "center_y":.5}
        index:10
        on_release:
            root.AddToList()