![](/img/trans.png)
[英]kivy.factory.FactoryException: Unknown class <MDTopAppBar>
[英]How can I modify the title of the MDTopAppBar when a button, located in a separate class, is clicked?
如何修改 MDTopAppBar 的標題以響應用戶在 NavigationDrawer 中選擇按鈕,例如更新標題以匹配所選按鈕的 label(例如“Coffee”)?
主程序
from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.app import MDApp
from kivymd.uix.scrollview import MDScrollView
class MainLayout(Screen):
pass
class NavigationDrawer(MDScrollView):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
class App(MDApp):
def build(self):
self.theme_cls.primary_palette = "Green"
self.theme_cls.theme_style = "Light"
kivy_layout = Builder.load_file("layout.kv")
return MainLayout()
if __name__ == "__main__":
App().run()
布局.kv
<NavigationDrawer>
MDNavigationDrawerMenu:
MDNavigationDrawerHeader:
title: "MyApp"
text: "Bottom Text"
source: "icon64.png"
spacing: "10dp"
MDNavigationDrawerDivider:
MDNavigationDrawerItem:
text: "Coffee"
icon: "coffee"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 1"
MDNavigationDrawerItem:
text: "History"
icon: "history"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 2"
MDNavigationDrawerItem:
text: "Settings"
icon: "cog"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 3"
MDNavigationDrawerDivider:
<MainLayout>
MDScreen:
MDTopAppBar:
id: top
title: "Title"
pos_hint: {"top": 1}
elevation: 4
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
MDNavigationLayout:
MDScreenManager:
id: screen_manager
MDScreen:
name: "scr 1"
MDLabel:
text: "Coffee"
halign: "center"
MDScreen:
name: "scr 2"
MDLabel:
text: "History"
halign: "center"
MDScreen:
name: "scr 3"
MDLabel:
text: "Settings"
halign: "center"
MDNavigationDrawer:
id: nav_drawer
radius: (0, 16, 16, 0)
NavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
在嘗試通過各種方式自行解決問題后,包括嘗試創建解決方案和在線研究潛在的解決方案,我無法找到滿意的解決方案。 因此,我確定有必要通過這個平台尋求幫助。
您需要向 MDNavigationDrawerHeader 添加一個 id,以便您可以從 class 訪問它。
MDNavigationDrawerHeader:
id: drawer_header
title: "MyApp"
text: "Bottom Text"
source: "icon64.png"
spacing: "10dp"
然后你需要在 NaviagtionDrawer class 中添加一個方法來進行更新。 您將通過調用 self.ids.drawer_header.title 訪問您的 NavDrawer 標題
class NavigationDrawer(MDScrollView):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
def set_title(self, title):
self.ids.drawer_header.title = title
最后,您需要告訴每個按鈕調用我創建的 set_title 方法來實際進行更新。
MDNavigationDrawerItem:
text: "Coffee"
icon: "coffee"
on_press:
root.nav_drawer.set_state("close")
root.set_title(self.text)
root.screen_manager.current = "scr 1"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.