You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KivyMD 1.1.1:如何获取FloatingActionButtonSpeedDial点击的堆叠项?

解决MDFloatingActionButtonSpeedDial回调无输出的问题

问题现象

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:07:35