KivyMD 1.1.1:如何获取FloatingActionButtonSpeedDial点击的堆叠项?
问题现象
使用KivyMD的MDFloatingActionButtonSpeedDial组件时,配置callback: app.callback后,点击展开的子按钮没有任何打印输出,但on_open和on_close事件可以正常触发。
原因分析
MDFloatingActionButtonSpeedDial的回调函数要求接收两个参数:按钮实例instance和对应按钮的data字典,原代码中callback函数仅定义了一个参数,导致函数调用时参数不匹配,无法正常执行。
解决步骤
修改Python代码中的callback函数,补充第二个参数button_data即可正常获取按钮信息:
修改后的Python代码
from kivymd.app import MDApp from kivy.lang.builder import Builder class My_FirstApp(MDApp): data = { "Python": "language-python", "Ruby": "language-ruby", "JS": "language-javascript" } def callback(self, instance, button_data): print("按钮被点击") # 打印按钮文本与图标信息 print(f"按钮文本: {button_data['text']}, 图标: {button_data['icon']}") # 也可通过实例对象获取图标属性 print(f"实例图标: {instance.icon}") def open(self): print("Open") self.root.ids.my_label.text = f'Open!' def close(self): print("Close") self.root.ids.my_label.text = f'Close!' def build(self): self.theme_cls.theme_style = "Dark" self.theme_cls.primary_palette = "BlueGray" return Builder.load_file("SpeedDialButton.kv") My_FirstApp().run()
KV文件无需修改
原KV文件中callback: app.callback的绑定逻辑正确,保持原样即可。
验证效果
运行修改后的代码,点击展开的子按钮(Python/Ruby/JS),控制台会输出对应按钮的文本、图标等信息,回调功能正常生效。
内容的提问来源于stack exchange,提问作者Hanishkaran Muneswaran
相关产品推荐
相关产品推荐

