我正在尝试使用厨房水槽演示学习kivymd。
我有一个相同的根窗口小部件,所有屏幕都在其中继承了NavigationDrawer和工具栏。 (这是最好的方法吗?)
现在我决定不使用这两个小部件来创建登录屏幕,我如何在不更改整个结构的情况下完成此操作。登录屏幕将首先出现,并且在单击“登录”时,根窗口小部件将照常显示。
此处提供代码:
main.py
# import [...]
class Screens(object):
#Screens that inherit the drawer and toolbar
data = {
"Route": {
"kv_file": "screens/route.kv",
"Factory": "Factory.Route()",
"name_screen": "routes",
"object": None },
"Account": {
"kv_file": "screens/account.kv",
"Factory": "Factory.Account()",
"name_screen": "account",
"object": None },
"Settings": {
"kv_file": "screens/settings.kv",
"Factory": "Factory.Settings()",
"name_screen": "settings",
"object": None },
}
def show_screen(self, name_screen):
if not self.data[name_screen]["object"]:
Builder.load_file(self.data[name_screen]["kv_file"])
self.data[name_screen]["object"] = eval(
self.data[name_screen]["Factory"])
self.root.ids.manager.add_widget(
self.data[name_screen]["object"])
self.root.ids.manager.current = self.data[name_screen]["name_screen"]
class Main(App, Screens):
theme_cls = ThemeManager()
title = "Main"
def build(self):
root = Builder.load_file("rootw.kv")
return root
def set_title_toolbar(self, title):
self.root.ids.toolbar.title = title
if __name__ == "__main__":
Main().run()
rootw.kv
NavigationLayout:
id: root_nav
MyCustomNavigationDrawer:
id: drawer
# content
# route
# account
# settings
# ...
FloatLayout:
id: float_layout
BoxLayout:
id: box_layout
orientation: 'vertical'
MDToolbar:
id: toolbar
title: app.title
md_bg_color: app.theme_cls.primary_color
background_palette: 'Primary'
background_hue: '500'
elevation: 10
left_action_items:
[['menu', lambda x: app.root.toggle_nav_drawer()]]
ScreenManager:
id: manager
transition: NoTransition()
Screen:
name: "welcome"
FloatLayout:
BoxLayout:
Label:
text: 'some screen i dont want'
我已经尝试了好几种方法,其中之一是用两个屏幕(登录屏幕和根窗口小部件屏幕)制作一个ScreenManager,但这与根窗口小部件混淆了,因为它的根现在是Screen而不是Navigation_Layout,这会引起一些问题。任何想法表示赞赏。