KivyMD中如何为MDFloatingActionButton添加切换按钮行为
该功能完全可实现。
你原有代码未生效的核心错误:将ToggleButtonBehavior继承到了App应用类上,切换行为需要绑定到目标按钮组件本身,而非应用入口类。
正确实现逻辑
- 自定义浮动按钮子类,多继承顺序为
ToggleButtonBehavior在前、MDFloatingActionButton在后,避免MRO解析顺序导致行为失效 - 给自定义按钮绑定
state状态变化监听,分别定义选中(down)、未选中(normal)状态下的按钮样式 - KV布局中替换原有原生
MDFloatingActionButton为自定义的带切换行为的按钮类 - 若需要多按钮互斥单选效果,给同组所有按钮设置相同的
group属性值即可,组件会自动处理互斥逻辑
可运行完整代码
from kivy.lang import Builder from kivymd.app import MDApp from kivymd.uix.button import MDFloatingActionButton from kivy.uix.behaviors import ToggleButtonBehavior class ToggleMDFab(ToggleButtonBehavior, MDFloatingActionButton): def __init__(self, **kwargs): super().__init__(**kwargs) self.bind(state=self._update_style) def _update_style(self, instance, state): if state == "down": # 选中状态样式 self.md_bg_color = [1, 0, 0, 1] self.text_color = [1, 1, 1, 1] self.icon = "torch-off" else: # 未选中状态样式 self.md_bg_color = [0, 1, 0, 1] self.text_color = [1, 0, 0, 1] self.icon = "torch" KV = ''' MDScreen: ToggleMDFab: icon: "torch" pos_hint: {"center_x": .5, "center_y": .5} theme_text_color: "Custom" text_color: [1, 0, 0, 1] user_font_size: 60 elevation: 12 md_bg_color: [0, 1, 0, 1] # 多按钮互斥单选时,同组按钮设置相同group值即可,示例: # group: "toolbar_fab" ''' class Myapp(MDApp): def build(self): return Builder.load_string(KV) if __name__ == "__main__": Myapp().run()
注意:多继承时行为类必须放在UI组件类前面,否则行为逻辑不会被正确加载。
内容的提问来源于stack exchange,提问作者Andrukva
相关产品推荐
相关产品推荐

