声明后数据无效 - KivyMD
Invalid data after declaration - KivyMD
我正在尝试将 kivyMD 列表用作按钮,即当单击 KivyMD 列表时,它会将用户带到另一个屏幕,但我不断收到“声明后无效数据”错误。
请观察我的代码是否有任何异常,这可能是导致此问题的原因..
这是我的 main.py 文件
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.core.window import Window
Window.size = (300, 500)
class IntroScreen(Screen):
pass
class SuccessScreen(Screen):
pass
class SearchScreen(Screen):
pass
class MenuScreen(Screen):
pass
class GettingStartedScreen(Screen):
pass
class ProjectApp(MDApp):
def build(self):
self.sm = ScreenManager(transition=NoTransition())
self.sm.add_widget(IntroScreen(name="intro_screen"))
self.sm.add_widget(GettingStartedScreen(name="getting_started_screen"))
self.sm.add_widget(SuccessScreen(name="success_screen"))
self.sm.add_widget(SearchScreen(name='search_screen'))
self.sm.add_widget(MenuScreen(name="menu_screen"))
return self.sm
def change_screen(self, screen, *kwargs):
self.sm.current = "intro_screen"
self.sm.current = "getting_started_screen"
self.sm.current = "success_screen"
self.sm.current = "search_screen"
self.sm.current = "menu_screen"
self.sm.current = screen
ProjectApp().run()
这是我的 .kv 文件
ScreenManager:
<IntroScreen>
name: "intro_screen"
FloatLayout:
# """Secondly, please is there a way to make MDCard auto
# resize automatically on any screen"""
MDCard:
orientation: 'vertical'
padding: 16
size_hint: None, None
size: "280dp", "360dp"
pos_hint: {"center_x": .5, "center_y": .6}
elevation: 8
orientation: 'vertical'
radius: 15
ScrollView:
MDList:
OneLineIconListItem:
text: "WHAT IS KETO DIET"
IconLeftWidget:
icon: "cash-multiple"
OneLineIconListItem:
text: "WHY TRY KETO DIET"
IconLeftWidget:
icon: "cash-100"
OneLineIconListItem:
text: "IS KETO RIGHT FOR YOU"
IconLeftWidget:
icon: "cash-marker"
OneLineIconListItem:
text: "GETTING STARTED"
IconLeftWidget:
icon: "cash"
on_touch_down: app.root.current = "getting_started_screen" #I THINK THIS IS WHERE THE INVALID DATA ERROR OCCURS
MDBottomAppBar:
MDToolbar:
icon: "arm-flex-outline"
type: 'bottom'
mode: 'center'
left_action_items: [["calendar-text", lambda x: x], ["account-group", lambda x: app.change_screen("success_screen")]]
right_action_items: [["magnify", lambda x: app.change_screen("search_screen")], ["menu", lambda x: app.change_screen("menu_screen")]]
<GettingStartedScreen>
name: "getting_started_screen"
FloatLayout:
MDCard:
orientation: "vertical"
elevation: 10
radius: 10
OneLineIconListItem:
text: "WHAT TO KNOW BEFORE STARTING"
IconLeftWidget:
icon: "cash"
OneLineIconListItem:
text: "WHAT TO DO BEFORE STARTING"
IconLeftWidget:
icon: "cash"
OneLineIconListItem:
text: "HOW TO START THE KETO DIET"
IconLeftWidget:
icon: "cash"
OneLineIconListItem:
text: "FREQUENTLY ASKED QUESTIONS"
IconLeftWidget:
icon: "cash"
<SuccessScreen>
name: "success_screen"
BoxLayout:
orientation: "vertical"
MDBottomAppBar:
MDToolbar:
icon: "magnify"
on_action_button: app.change_screen("search_screen")
type: 'bottom'
mode: 'center'
left_action_items: [["calendar-text", lambda x: app.change_screen("intro_screen")], ["account-group", lambda x: x]]
right_action_items: [["magnify", lambda x: app.change_screen("search_screen")], ["menu", lambda x: app.change_screen("menu_screen")]]
<SearchScreen>
name: 'search_screen'
BoxLayout:
orientation: 'vertical'
MDBottomAppBar:
MDToolbar:
icon: "window-close"
type: "bottom"
mode: "center"
left_action_items: [["calendar-text", lambda x: app.change_screen("intro_screen")], ["account-group", lambda x: app.change_screen("success_screen")]]
right_action_items: [["magnify", lambda x: x], ["menu", lambda x: app.change_screen("menu_screen")]]
<MenuScreen>
name: "menu_screen"
BoxLayout:
orientation: "vertical"
MDBottomAppBar:
MDToolbar:
icon: "reload"
type: "bottom"
mode: "center"
left_action_items: [["calendar-text", lambda x: app.change_screen("intro_screen")], ["account-group", lambda x: app.change_screen("success_screen")]]
right_action_items: [["magnify", lambda x: app.change_screen("search_screen")], ["menu", lambda x: x]]
非常感谢...请在我认为会发生此错误的地方留下评论。其次,我如何制作 MDCard,在 .kv
文件中仅在屏幕尺寸上自动调整大小。 . 再次提前致谢..
OneLineIconListItem
是 Button
的一种类型,因此您只需添加一个 on_release
属性即可。:
MDList:
OneLineIconListItem:
text: "WHAT IS KETO DIET"
IconLeftWidget:
icon: "cash-multiple"
OneLineIconListItem:
text: "WHY TRY KETO DIET"
IconLeftWidget:
icon: "cash-100"
OneLineIconListItem:
text: "IS KETO RIGHT FOR YOU"
IconLeftWidget:
icon: "cash-marker"
OneLineIconListItem:
text: "GETTING STARTED"
on_release:
app.root.current = "getting_started_screen"
IconLeftWidget:
icon: "cash"
我正在尝试将 kivyMD 列表用作按钮,即当单击 KivyMD 列表时,它会将用户带到另一个屏幕,但我不断收到“声明后无效数据”错误。
请观察我的代码是否有任何异常,这可能是导致此问题的原因..
这是我的 main.py 文件
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.core.window import Window
Window.size = (300, 500)
class IntroScreen(Screen):
pass
class SuccessScreen(Screen):
pass
class SearchScreen(Screen):
pass
class MenuScreen(Screen):
pass
class GettingStartedScreen(Screen):
pass
class ProjectApp(MDApp):
def build(self):
self.sm = ScreenManager(transition=NoTransition())
self.sm.add_widget(IntroScreen(name="intro_screen"))
self.sm.add_widget(GettingStartedScreen(name="getting_started_screen"))
self.sm.add_widget(SuccessScreen(name="success_screen"))
self.sm.add_widget(SearchScreen(name='search_screen'))
self.sm.add_widget(MenuScreen(name="menu_screen"))
return self.sm
def change_screen(self, screen, *kwargs):
self.sm.current = "intro_screen"
self.sm.current = "getting_started_screen"
self.sm.current = "success_screen"
self.sm.current = "search_screen"
self.sm.current = "menu_screen"
self.sm.current = screen
ProjectApp().run()
这是我的 .kv 文件
ScreenManager:
<IntroScreen>
name: "intro_screen"
FloatLayout:
# """Secondly, please is there a way to make MDCard auto
# resize automatically on any screen"""
MDCard:
orientation: 'vertical'
padding: 16
size_hint: None, None
size: "280dp", "360dp"
pos_hint: {"center_x": .5, "center_y": .6}
elevation: 8
orientation: 'vertical'
radius: 15
ScrollView:
MDList:
OneLineIconListItem:
text: "WHAT IS KETO DIET"
IconLeftWidget:
icon: "cash-multiple"
OneLineIconListItem:
text: "WHY TRY KETO DIET"
IconLeftWidget:
icon: "cash-100"
OneLineIconListItem:
text: "IS KETO RIGHT FOR YOU"
IconLeftWidget:
icon: "cash-marker"
OneLineIconListItem:
text: "GETTING STARTED"
IconLeftWidget:
icon: "cash"
on_touch_down: app.root.current = "getting_started_screen" #I THINK THIS IS WHERE THE INVALID DATA ERROR OCCURS
MDBottomAppBar:
MDToolbar:
icon: "arm-flex-outline"
type: 'bottom'
mode: 'center'
left_action_items: [["calendar-text", lambda x: x], ["account-group", lambda x: app.change_screen("success_screen")]]
right_action_items: [["magnify", lambda x: app.change_screen("search_screen")], ["menu", lambda x: app.change_screen("menu_screen")]]
<GettingStartedScreen>
name: "getting_started_screen"
FloatLayout:
MDCard:
orientation: "vertical"
elevation: 10
radius: 10
OneLineIconListItem:
text: "WHAT TO KNOW BEFORE STARTING"
IconLeftWidget:
icon: "cash"
OneLineIconListItem:
text: "WHAT TO DO BEFORE STARTING"
IconLeftWidget:
icon: "cash"
OneLineIconListItem:
text: "HOW TO START THE KETO DIET"
IconLeftWidget:
icon: "cash"
OneLineIconListItem:
text: "FREQUENTLY ASKED QUESTIONS"
IconLeftWidget:
icon: "cash"
<SuccessScreen>
name: "success_screen"
BoxLayout:
orientation: "vertical"
MDBottomAppBar:
MDToolbar:
icon: "magnify"
on_action_button: app.change_screen("search_screen")
type: 'bottom'
mode: 'center'
left_action_items: [["calendar-text", lambda x: app.change_screen("intro_screen")], ["account-group", lambda x: x]]
right_action_items: [["magnify", lambda x: app.change_screen("search_screen")], ["menu", lambda x: app.change_screen("menu_screen")]]
<SearchScreen>
name: 'search_screen'
BoxLayout:
orientation: 'vertical'
MDBottomAppBar:
MDToolbar:
icon: "window-close"
type: "bottom"
mode: "center"
left_action_items: [["calendar-text", lambda x: app.change_screen("intro_screen")], ["account-group", lambda x: app.change_screen("success_screen")]]
right_action_items: [["magnify", lambda x: x], ["menu", lambda x: app.change_screen("menu_screen")]]
<MenuScreen>
name: "menu_screen"
BoxLayout:
orientation: "vertical"
MDBottomAppBar:
MDToolbar:
icon: "reload"
type: "bottom"
mode: "center"
left_action_items: [["calendar-text", lambda x: app.change_screen("intro_screen")], ["account-group", lambda x: app.change_screen("success_screen")]]
right_action_items: [["magnify", lambda x: app.change_screen("search_screen")], ["menu", lambda x: x]]
非常感谢...请在我认为会发生此错误的地方留下评论。其次,我如何制作 MDCard,在 .kv
文件中仅在屏幕尺寸上自动调整大小。 . 再次提前致谢..
OneLineIconListItem
是 Button
的一种类型,因此您只需添加一个 on_release
属性即可。:
MDList:
OneLineIconListItem:
text: "WHAT IS KETO DIET"
IconLeftWidget:
icon: "cash-multiple"
OneLineIconListItem:
text: "WHY TRY KETO DIET"
IconLeftWidget:
icon: "cash-100"
OneLineIconListItem:
text: "IS KETO RIGHT FOR YOU"
IconLeftWidget:
icon: "cash-marker"
OneLineIconListItem:
text: "GETTING STARTED"
on_release:
app.root.current = "getting_started_screen"
IconLeftWidget:
icon: "cash"