Python 无法在.build()和.start()之后获得kivy应用程序的屏幕
这段代码运行得很好,我可以用大量的动态屏幕启动应用程序,并随之更新菜单列表Python 无法在.build()和.start()之后获得kivy应用程序的屏幕,python,kivy,Python,Kivy,这段代码运行得很好,我可以用大量的动态屏幕启动应用程序,并随之更新菜单列表 from kivy.lang import Builder from kivymd.app import MDApp from kivymd.uix.list import OneLineListItem KV = ''' Screen: MDToolbar: id: toolbar pos_hint: {"top": 1} elevatio
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.list import OneLineListItem
KV = '''
Screen:
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: "MDNavigationDrawer"
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
NavigationLayout:
x: toolbar.height
ScreenManager:
id: screen_manager
MDNavigationDrawer:
id: nav_drawer
BoxLayout:
canvas:
Rectangle:
pos: self.pos
size: self.size
orientation: 'vertical'
padding: "3dp"
spacing: "8dp"
AnchorLayout:
anchor_x: "center"
size_hint:1, None
halign: "center"
height: img_baniere_avekia_top.height
Image:
id: img_baniere_avekia_top
size_hint: None, None
size: "150dp", "93.56dp"
source: "menu_image.png"
ScrollView:
MDList:
id: menu_list
'''
screen_kv = '''
Screen:
MDLabel:
text: "Screen 1"
halign: "center"
'''
def chose_screen(widget, nav_drawer, screen_manager, text):
nav_drawer.set_state("close")
screen_manager.current = text
def add_tab(nav_drawer, screen_manager, menu_list, screen, title):
screen.name = title
menu_element = OneLineListItem(text=title)
menu_list.add_widget(menu_element)
screen_manager.add_widget(screen)
menu_element.bind(on_press = lambda w:chose_screen(w, nav_drawer, screen_manager, title))
class App(MDApp):
def build(self):
print("build app")
self.screen = Builder.load_string(KV)
return self.screen
def on_start(self):
print("start app")
for title in ["general","info"]:
self.add_tab(Builder.load_string(screen_kv), title)
def add_tab(self, screen, title):
add_tab(self.screen.ids.nav_drawer,
self.screen.ids.screen_manager,
self.screen.ids.menu_list,
screen,
title)
if __name__ == "__main__":
app = App()
app.run()
问题:如果我想在应用程序生成后添加新屏幕,我无法访问app.screen元素!!!
app.add_tab()方法不再有效!!
为什么我不能保存应用程序屏幕的引用?我该如何保存此参考资料
下面是一个我想做但失败的例子(同样的代码,我只是更改了结尾,试图在创建后添加_选项卡)
错误消息:“AttributeError:'App'对象没有属性'screen'”错误消息非常清楚-您的应用没有属性
screen
,因为您尚未设置该属性,而这又是因为您尚未运行生成方法。不要试图在屏幕存在之前修改它
if __name__ == "__main__":
app = App()
app.add_tab(Builder.load_string(screen_kv), "Contact Us")
app.run()