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

问题描述 投票:0回答:1

我是python的初学者,这是我的第一个应用程序,我仍然学不到很多东西,所以请不要以不聪明的代码来判断我(我几乎全部写在一个堆中,对此感到抱歉)。

应用程序的主要思想是提醒用户进行一些活动,例如喝水,吃药,然后在日历中查看所有内容(您会在屏幕截图herehere中看到它),但是首先,我想制作一个“吃药”部分-它必须计算多少天如果使用者知道自己有多少药,以及每天必须服用多少次,则必须服用。

我已经创建了两个屏幕:主要用于显示对象,第二个用于创建小部件。现在,我想在“第二个”屏幕上填充所有数据,并将带有该数据的小部件添加到“主”屏幕。也许我应该使用MDCard或列表?但是我真的不知道该怎么做。

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

真的希望得到您的帮助,因为这是我的大学编程课程项目,但是我的教授根本不想帮助学生,所以我没有其他人要问了。

所以是main.py

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()

my.kv

<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"

python dynamic widget kivy screen
1个回答
0
投票
这是关于此的Kivy文档:

https://kivy.org/doc/stable/api-kivy.uix.gridlayout.html

以及动态创建的示例(有点困难,但是您可以尝试对其进行反向工程!)

Dynamic grid in Kivy with each grid element containing multiple widgets

祝你好运。>>

© www.soinside.com 2019 - 2024. All rights reserved.