#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()