Kivy:self.parent.current 没有使用屏幕管理器将我重定向到不同的屏幕
Kivy: self.parent.current not redirecting me to different screen using screen manager
使用 Kivymd,我试图让 MDList 中的按钮转到某个页面,但是当我尝试设置 on_release 时,没有任何反应。有人请帮忙。我需要能够单击注销按钮并使用 python 函数将我重定向到登录屏幕,因为我还想在单击按钮后做其他事情
main.py
import kivy
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.behaviors.button import ButtonBehavior
from kivymd.app import MDApp
from kivymd.theming import ThemeManager
class SignInScreen(Screen):
pass
class HomeScreen(Screen):
pass
class MenuScreen(Screen):
pass
class ButtonGrid(ButtonBehavior, BoxLayout):
pass
class AttendanceApp(MDApp):
def build(self):
#self.theme_cls.primary_palette = "LightBlue"
#self.theme_cls.accent_palette = "Red"
return HomeScreen()
def change_theme(self, primary_palette, accent_palette):
pass
#theme_cls = ThemeManager()
def signin_pressed(self, instance):
pass
if __name__ == "__main__":
AttendanceApp().run()
Attendance.kv
# Filename: Attendance.kv
#:import utils kivy.utils
#screens
<SignInScreen>
#code
<HomeScreen>
NavigationLayout:
ScreenManager:
Screen:
BoxLayout:
orientation: "vertical"
MDToolbar:
title: "Home"
left_action_items: [["menu", lambda x: nav_menu.set_state()]]
elevation: 10
MDLabel:
text: "Content"
halign: "center"
MDNavigationDrawer:
id: nav_menu
MenuScreen:
ScreenManager:
id: sm_menu
SignInScreen:
name: "signin"
HomeScreen:
name: "home"
MenuScreen:
name: "menu"
<MenuScreen>
ScrollView:
MDList:
id: scroll
OneLineAvatarIconListItem:
id: menu_home
text: "Home"
elevation: 10
IconLeftWidget:
icon: "home"
OneLineAvatarIconListItem:
id: menu_schedule
text: "Schedule"
elevation: 10
IconLeftWidget:
icon: "calendar-month"
OneLineAvatarIconListItem:
id: menu_take
text: "Take"
elevation: 10
IconLeftWidget:
icon: "account-multiple"
OneLineAvatarIconListItem:
id: menu_rosters
text: "Rosters"
elevation: 10
IconLeftWidget:
icon: "clipboard-list-outline"
OneLineAvatarIconListItem:
id: menu_subs
text: "Subs"
elevation: 10
IconLeftWidget:
icon: "account-multiple-outline"
OneLineAvatarIconListItem:
id: menu_help
text: "Help"
elevation: 10
IconLeftWidget:
icon: "lightbulb-on-outline"
OneLineAvatarIconListItem:
id: menu_settings
text: "Settings"
elevation: 10
IconLeftWidget:
icon: "settings-outline"
OneLineAvatarIconListItem:
id: menu_signout
text: "Sign Out"
elevation: 10
on_release: "signin"
IconLeftWidget:
icon: "exit-to-app"
您可以像这样 Button
稍微更改 kv
:
OneLineAvatarIconListItem:
id: menu_signout
text: "Sign Out"
elevation: 10
on_release: app.signout_pressed()
IconLeftWidget:
icon: "exit-to-app"
然后在您的 AttendanceApp
中添加一个方法:
def signout_pressed(self):
print('signout pressed')
self.root.current = 'signin'
这假设您的 AttendanceApp
的 root
将是 ScreenManager
。
使用 Kivymd,我试图让 MDList 中的按钮转到某个页面,但是当我尝试设置 on_release 时,没有任何反应。有人请帮忙。我需要能够单击注销按钮并使用 python 函数将我重定向到登录屏幕,因为我还想在单击按钮后做其他事情
main.py
import kivy
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.behaviors.button import ButtonBehavior
from kivymd.app import MDApp
from kivymd.theming import ThemeManager
class SignInScreen(Screen):
pass
class HomeScreen(Screen):
pass
class MenuScreen(Screen):
pass
class ButtonGrid(ButtonBehavior, BoxLayout):
pass
class AttendanceApp(MDApp):
def build(self):
#self.theme_cls.primary_palette = "LightBlue"
#self.theme_cls.accent_palette = "Red"
return HomeScreen()
def change_theme(self, primary_palette, accent_palette):
pass
#theme_cls = ThemeManager()
def signin_pressed(self, instance):
pass
if __name__ == "__main__":
AttendanceApp().run()
Attendance.kv
# Filename: Attendance.kv
#:import utils kivy.utils
#screens
<SignInScreen>
#code
<HomeScreen>
NavigationLayout:
ScreenManager:
Screen:
BoxLayout:
orientation: "vertical"
MDToolbar:
title: "Home"
left_action_items: [["menu", lambda x: nav_menu.set_state()]]
elevation: 10
MDLabel:
text: "Content"
halign: "center"
MDNavigationDrawer:
id: nav_menu
MenuScreen:
ScreenManager:
id: sm_menu
SignInScreen:
name: "signin"
HomeScreen:
name: "home"
MenuScreen:
name: "menu"
<MenuScreen>
ScrollView:
MDList:
id: scroll
OneLineAvatarIconListItem:
id: menu_home
text: "Home"
elevation: 10
IconLeftWidget:
icon: "home"
OneLineAvatarIconListItem:
id: menu_schedule
text: "Schedule"
elevation: 10
IconLeftWidget:
icon: "calendar-month"
OneLineAvatarIconListItem:
id: menu_take
text: "Take"
elevation: 10
IconLeftWidget:
icon: "account-multiple"
OneLineAvatarIconListItem:
id: menu_rosters
text: "Rosters"
elevation: 10
IconLeftWidget:
icon: "clipboard-list-outline"
OneLineAvatarIconListItem:
id: menu_subs
text: "Subs"
elevation: 10
IconLeftWidget:
icon: "account-multiple-outline"
OneLineAvatarIconListItem:
id: menu_help
text: "Help"
elevation: 10
IconLeftWidget:
icon: "lightbulb-on-outline"
OneLineAvatarIconListItem:
id: menu_settings
text: "Settings"
elevation: 10
IconLeftWidget:
icon: "settings-outline"
OneLineAvatarIconListItem:
id: menu_signout
text: "Sign Out"
elevation: 10
on_release: "signin"
IconLeftWidget:
icon: "exit-to-app"
您可以像这样 Button
稍微更改 kv
:
OneLineAvatarIconListItem:
id: menu_signout
text: "Sign Out"
elevation: 10
on_release: app.signout_pressed()
IconLeftWidget:
icon: "exit-to-app"
然后在您的 AttendanceApp
中添加一个方法:
def signout_pressed(self):
print('signout pressed')
self.root.current = 'signin'
这假设您的 AttendanceApp
的 root
将是 ScreenManager
。