我是python的初学者,这是我的第一个应用程序,我仍然学不到很多东西,所以请不要以不聪明的代码来判断我(我几乎全部写在一个堆中,对此感到抱歉) 。
应用程序的主要思想是提醒用户进行一些活动,例如喝水,吃药,然后在日历中查看所有内容(您会在屏幕快照here和here上看到它),但是起初我想做一个“吃药”部分-它必须如果用户知道自己吃了多少药以及每天必须吃多少次药,则计算用户必须服药多少天。
我已经创建了两个屏幕:主要用于显示对象,第二个用于创建小部件。现在,我想在第二个屏幕上填充所有数据,并将带有该数据的小部件添加到主屏幕。也许我应该使用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"
答案 0 :(得分:0)
您应该使用Grid Layout而不是BoxLayout,它可以完美地解决您的问题。
这是关于此的Kivy文档:
https://kivy.org/doc/stable/api-kivy.uix.gridlayout.html
和一个动态创建的示例(有点困难,但是您可以尝试对其进行逆向工程!)
Dynamic grid in Kivy with each grid element containing multiple widgets
祝你好运。