我怎样才能在彼此下面的自己的标签中打印数据列表

How can I print a list of data each in its own label underneath each other

我有一大堆数据要在我的应用程序上显示,但我找不到一种方法来垂直打印数据,每个列表元素都在最后一个列表下方的自己的标签中。将来我希望用 MDCard.

替换标签

此外,如果列表到达屏幕底部,我将如何向下滚动?

*.py

import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.properties import StringProperty
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, Screen

class FirstWindow(Screen):
    def __init__(self, **kwargs):
        super(FirstWindow, self).__init__(**kwargs)

        list1 = ['1','2','3','4','5','6','7','8','9','10','11','12']

        for x in list1:
            self.add_widget(Label(text=x,pos_hint={'center_x':0.5, 'center_y':0.5}))


class WindowManager(ScreenManager):
    pass

kv = Builder.load_file('NearMe.kv')

class NearMeApp(App):
    def build(self):
        return kv

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

*.kv

WindowManager:
    FirstWindow:

<FirstWindow>:
    name:"FirstWindow"
    GridLayout:
        cols:1
        size: root.width, root.height
        GridLayout:
            cols:3
            

FirstWindow__init__() 方法是将所有 Labels 添加到 FirstWindow,但它们都在同一位置。我怀疑你真的想把 Labels 添加到最里面的 GridLayout。为此,您可以在 kv:

中向 GridLayout 添加一个 id
WindowManager:
    FirstWindow:

<FirstWindow>:
    name:"FirstWindow"
    GridLayout:
        cols:1
        size: root.width, root.height
        GridLayout:
            id: grid  # Added id
            cols:3

然后重构您的 FirstWindow class 以使用 id:

class FirstWindow(Screen):
    def __init__(self, **kwargs):
        super(FirstWindow, self).__init__(**kwargs)
        Clock.schedule_once(self.fill)  # this must be delayed until the `id` is available

    def fill(self, dt):
        grid = self.ids.grid  # get a reference to the GridLayout

        list1 = ['1','2','3','4','5','6','7','8','9','10','11','12']

        for x in list1:
            grid.add_widget(Label(text=x,pos_hint={'center_x':0.5, 'center_y':0.5}))  # add Labels to the GridLayout