KivyMD-Python-如何在屏幕上动态添加新的小部件?

KivyMD-Python-如何在屏幕上动态添加新的小部件?,python,dynamic,widget,kivy,screen,Python,Dynamic,Widget,Kivy,Screen,我是python的初学者,这是我的第一个应用程序,我还没有学到很多东西,所以请不要因为我写的代码几乎都是在一堆中而对我进行评判,很抱歉 应用程序的主要思想是让用户做一些活动,例如喝水、吃药,然后在日历中看到屏幕截图和,但首先我想做一个吃药的部分——如果用户知道他们有多少药片,以及每天必须服用多少次,那么必须计算出他们需要服用药片的天数 我已经创建了两个屏幕:主屏幕用于显示对象,第二个屏幕用于创建小部件。现在我想填充第二个屏幕上的所有数据,并将带有这些数据的小部件添加到主屏幕。也许我应该使用MDC

我是python的初学者,这是我的第一个应用程序,我还没有学到很多东西,所以请不要因为我写的代码几乎都是在一堆中而对我进行评判,很抱歉

应用程序的主要思想是让用户做一些活动,例如喝水、吃药,然后在日历中看到屏幕截图和,但首先我想做一个吃药的部分——如果用户知道他们有多少药片,以及每天必须服用多少次,那么必须计算出他们需要服用药片的天数

我已经创建了两个屏幕:主屏幕用于显示对象,第二个屏幕用于创建小部件。现在我想填充第二个屏幕上的所有数据,并将带有这些数据的小部件添加到主屏幕。也许我应该使用MDCard或List?但我真的不知道如何做到这一切

我是否应该创建数据库来添加数据,然后在主屏幕上根据该数据创建新的小部件?如果是,如何创建?以及如何创建和表示这些动态小部件?也许我必须创建一个函数,以某种方式将小部件添加到主屏幕的第二个选项卡上,但是我应该在哪里以及如何实现它呢

真的希望你能帮我,因为这是我大学编程课程的项目,但我的教授根本不想帮助学生,所以我没有其他人可以问

所以它是main.py

还有我的


您不应该使用BoxLayout,而应该使用网格布局,它可以完美地解决您的问题

以下是关于这一点的Kivy文档:

动态创建的例子有点难,但你可以尝试反向工程


祝你好运。

谢谢你提供的信息,这很有帮助,但主要问题不在于此。我不知道按下按钮后如何创建新的小部件。最近,我尝试在一个新类中执行函数,该类位于GridLayout内部,但当我按下该按钮时,没有创建任何函数,我不确定它为什么会回答您的第二个问题:
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.app import MDApp

class ScreensManager(ScreenManager):
    pass

class MainScreen(Screen):
    pass

class SecondScreen(Screen):
    pass


class MyApp(MDApp):
    def __init__(self, **kwargs):
        self.title = "Do Not Forget"
        self.theme_cls.primary_palette = "Teal"
        Window.size = (1080 / 3.4, 2280 / 3.4)
        super().__init__(**kwargs)

    def build(self):
        return ScreensManager() 

if __name__ == "__main__":
    MyApp().run()
<ScreensManager>:
    MainScreen:
    SecondScreen:

<MainScreen>:
    name: "main_screen"

    BoxLayout:
        orientation: 'vertical'

        MDBottomNavigation:
            MDBottomNavigationItem:
                name: 'screen1'
                text: 'active'
                icon: 'note-plus'

                MDFloatingActionButton:
                    pos_hint:{"center_x": .85, "center_y": .075}
                    icon: 'plus'
                    md_bg_color: app.theme_cls.primary_color

                    #this is uncompleted part, doesn't matter for now
                    #on_release:
                    #   app.root.current = "third_screen"
                    #   root.manager.transition.direction = "left"


            MDBottomNavigationItem:
                name: 'screen2'
                text: 'medicine'
                icon: 'pill'

                MDFloatingActionButton:
                    pos_hint:{"center_x": .85, "center_y": .075}
                    icon: 'plus'
                    md_bg_color: app.theme_cls.primary_color
                    on_release:
                        app.root.current = "second_screen"
                        root.manager.transition.direction = "left"

            MDBottomNavigationItem:
                name: 'screen3'
                text: 'calendar'
                icon: 'calendar'


<SecondScreen>:
    name: "second_screen"

    BoxLayout:
        orientation: 'vertical'
        BoxLayout:
            orientation: 'vertical'
            padding: 20

            MDLabel:
                text: "Insert your data"

            Widget:

            MDLabel:
                text:"Name of medicine"

            MDTextField:
                id: name_med
                hint_text: "Name"
                mode: "rectangle"

            Widget:

            MDLabel:
                text:"How many pills do you have?"

            MDTextField:
                id: pills_amount
                hint_text: "Pills amount"
                mode: "rectangle"

            Widget:

            MDLabel:
                text:"How many times a day to take them?"

            MDTextField:
                id: times_amount
                hint_text: "Times a day"
                mode: "rectangle"

        FloatLayout:
            MDFloatingActionButton:
                pos_hint:{"center_x": .2, "center_y": .2}
                icon: 'arrow-left'
                on_release:
                    app.root.current = "main_screen"
                    root.manager.transition.direction = "right"

            MDFloatingActionButton:
                pos_hint:{"center_x": .8, "center_y": .2}
                icon: 'check'
                md_bg_color: app.theme_cls.primary_color
                on_release:
                    app.root.current = "main_screen"
                    root.manager.transition.direction = "right"