簡體   English   中英

單擊位於單獨的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM