这可能有一个简单的解决方案,但我看不出来。以下列代码为参考
from kivy.uix.floatlayout import FloatLayout
from kivy.app import App
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from kivymd.theming import ThemeManager
from kivy.properties import ObjectProperty
from kivy.properties import StringProperty
from kivymd.uix.navigationdrawer import NavigationLayout, MDNavigationDrawer
from kivymd.uix.list import OneLineListItem, OneLineIconListItem
from kivymd.uix.list import MDList
from kivymd.uix.toolbar import MDToolbar
class HomeScreen(Screen):
pass
class ContentDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
class MainApp(MDApp):
def __init__(self):
self.GUI = Builder.load_file("main.kv")
self.theme_cls = ThemeManager()
def build(self):
return self.GUI
if __name__ == "__main__":
MainApp().run()main.kv
<ContentDrawer>:
ScrollView:
MDList:
OneLineIconListItem:
text: "Screen 1"
icon: 'basketball-hoop'
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "add_buy_condition_screen"
OneLineIconListItem:
text: "Screen 2"
icon: 'basketball'
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "add_sell_condition_screen"
NavigationLayout:
MDNavigationDrawer:
id: nav_drawer
ContentDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
ScreenManager:
HomeScreen:
name: "home_screen"
id: home_screen
BoxLayout:
orientation:"vertical"
MDToolbar:
pos_hint:{"top": 1}
elevation:10
title:"Lleno"
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]因此,我试图创建一个工具栏,当我使用上面的代码创建它时,除了MDNavigation抽屉出现在工具栏下面之外,每个工具条都工作得很好。我想在主屏幕类中为工具栏创建框布局,如下所示。
class HomeScreen(Screen):
def __init__(self, **kwargs):
super(HomeScreen, self).__init__(**kwargs)
print("My main app's ids: ", self.ids)
self.nav_drawer = self.ids["nav_drawer"]
self.header_box = BoxLayout(orientation="vertical")
self.toolbar = MDToolbar(pos_hint={"top": 1}, elevation=10,
title="Lleno", left_action_items= [["menu", lambda x: nav_drawer.set_state("open")]])
self.header_box.add_widget(self.toolbar)
self.add_widget(self.header_box)但是,我似乎无法从我的self.nav_drawer文件中获得该main.kv id,如何访问该id,或者当MDNavigation抽屉打开工具栏时,如何以另一种方式创建工具栏。self.ids的print语句返回一个空的dict
发布于 2020-07-19 13:24:20
来自ids文件的kv位于创建它们的规则的根中,因此nav_drawer id是在NavigationLayout的实例中,而不是在HomeScreen的实例中。而且,ids在__init__()方法中不可用,因为它们尚未创建。可以使用ids或on_kv_post()方法延迟对on_kv_post()的访问。
您可以使用以下内容访问ids在您的App中
App.get_running_app().root.ids['nav_drawer']https://stackoverflow.com/questions/62979893
复制相似问题