#python-3.x #kivy #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
файле автоматически изменялся размер только по размеру экрана.. Еще раз заранее спасибо..
Ответ №1:
Это 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"
Комментарии:
1. Большое спасибо, Джон, это наконец сработало, проблема теперь в том, что каждый список MDL выводит меня на один и тот же экран, но я хочу, чтобы каждый список MDL выводил меня на другой экран, пожалуйста, как это исправить.
2. Я неправильно понял ваш вопрос, я думал, что это то, чего вы хотели. Это
OneLineIconListItem
типButton
, поэтому вы можете просто добавитьon_release
атрибут. Смотрите мой обновленный ответ.