将 Kivy 按钮链接到构建器上的功能

Linking a Kivy Button to Function on Builder

我想在屏幕上附加一个按钮到一个函数,但是每次下面都显示错误

AttributeError: 'MDFlatButton' object has no attribute 'plus_drive'

这是一个包含字符串页面的帮助文件

screen_helper = """
    Screen:
        canvas:
            
            RoundedRectangle:
                pos: self.pos
                size: self.size
                radius: [25, 0, 0, 0]
        ScreenManager:
            clearcolor:[0, 1, 0, 1]
            MenuScreen:
            ransomwareScreen:
            keyScreen:
        
        
    <MenuScreen>:
        name:'menu'
    
        MDBoxLayout:
            orientation: "vertical"
    
            MDToolbar:
                title: "Title"
               
    
            MDBoxLayout:
    
                MDNavigationRail:
                    id: rail
                    use_resizeable: True
    
                    MDNavigationRailItem:
                        icon: "comment-account"
                        text: "profile"
                        
    
                    MDNavigationRailItem:
                        icon: "security"
                        text: "security"
                        on_touch_up : root.manager.current = 'ransomware'
    
    
                    MDNavigationRailItem:
                        icon: "folder-key"
                        text: "folder-key"
                        on_press : root.manager.current = 'key_file'    
    
    
    <ransomwareScreen>:
        name: 'ransomware'
        
        MDList:   
            OneLineListItem:
                text : "item"
        MDFlatButton:
            text : "salam"
            pos_hint: {"center_x": .9, "center_y": .1}
            on_release : self.plus_drive        
    
        MDBoxLayout:
            orientation: "vertical"
    
            MDToolbar:
                title: "demo"
    
            MDBoxLayout:
    
                MDNavigationRail:
                    id: rail
                    use_resizeable: True
    
                    MDNavigationRailItem:
                        icon: "comment-account"
                        text: "profile"
                        on_release : root.manager.current = 'menu'
    
                    MDNavigationRailItem:
                        icon: "security"
                        text: "security"
                        on_release : root.manager.current = 'ransomware'
                        
    
    
                    MDNavigationRailItem:
                        icon: "folder-key"
                        text: "folder-key"
                        on_release : root.manager.current = 'key_file'  
    
    
    
    <keyScreen>:
        name: 'key_file'
        OneLineListItem:
            id : "drive"
    
        MDBoxLayout:
            orientation: "vertical"
    
            MDToolbar:
                title: "demo"
    
            MDBoxLayout:
    
                MDNavigationRail:
                    id: rail
                    use_resizeable: True
    
                    MDNavigationRailItem:
                        icon: "comment-account"
                        text: "profile"
                        on_release : root.manager.current = 'menu'
    
                    MDNavigationRailItem:
                        icon: "security"
                        text: "security"
                        on_release : root.manager.current = 'ransomware'
    
    
                    MDNavigationRailItem:
                        icon: "folder-key"
                        text: "folder-key"
                        on_release : root.manager.current = 'key_file'   
    
    """

和我的 运行 应用代码:

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from helper import *

class MenuScreen(Screen):
    pass

class ransomwareScreen(Screen):

    def plus_drive(self , obj):
        print("salam")
        return

class keyScreen(Screen):
    pass

sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(ransomwareScreen(name='ransomware'))
sm.add_widget(keyScreen(name='key_file'))

class DemoApp(MDApp):
    def build(self):
        screen = Builder.load_string(screen_helper)
        return screen


DemoApp().run()
MDFlatButton:
    text : "salam" 
    pos_hint: {"center_x": .9, "center_y": .1}
    on_release : app.plus_drive()

因为您正在调用应用程序中的函数