Как запустить функцию при нажатии кнопки быстрого набора KivyMD?

#python #python-3.x #kivy #kivy-language #kivymd

Вопрос:

Я пытаюсь заставить функцию срабатывать при нажатии кнопки на быстром наборе KivyMD. В настоящее время я использую обратный вызов из кода .kv, как показано здесь:

 MDFloatingActionButtonSpeedDial:
        bg_hint_color: app.theme_cls.primary_light
        data: app.data
        root_button_anim: True
        callback: app.btn
 

Затем это вызовет код python:

 #DATA FOR THE SPEED DIAL
data = {
        'Create': 'file-document',
        'Open': 'folder-open'
        
    }
#FUNCTION HERE
    def btn(self, button):
        print(button)
        if button =="<kivymd.uix.button.MDFloatingBottomButton object at 0x000001BBCAF5BA50>":
            print("test")
 

Я ввожу аргумент button , чтобы получить название кнопки, поэтому я помещаю его в if заявление, чтобы посмотреть, работает ли все это до сих пор, но текст не печатается. Кнопка печатается, поэтому я поместил ее в оператор if text , который не печатается, поэтому я действительно не знаю, что здесь происходит.
Надеюсь, сообщество сможет помочь.

Ответ №1:

isinstance проверяет, к какому классу относится объект.

 from kivy.lang import Builder

from kivymd.app import MDApp
from kivymd.uix.button import MDFloatingBottomButton

KV = '''
MDScreen:

    MDFloatingActionButtonSpeedDial:
        data: app.data
        root_button_anim: True
        callback: app.callback
'''


class Example(MDApp):
    data = {
        'Create': 'file-document',
        'Open': 'folder-open',
    }

    def build(self):
        return Builder.load_string(KV)

    def callback(self, instance):
        print('callback')
        icon = instance.icon
        # if you want check button, use
        if isinstance(instance, MDFloatingBottomButton):
            if icon == 'file-document':
                print('Read file')
            elif icon == 'folder-open':
                print('Open folder')


Example().run()