Kivy自定义ToggleButton组切换时未恢复原色的问题求助
问题描述
在Kivy框架中自定义ToggleButton后,将按钮设置为同一组,点击组内其他按钮时,之前被选中的按钮无法自动恢复原色,仅在鼠标悬停时才会恢复。期望实现点击组内其他按钮时,之前选中的按钮自动恢复原色。
问题截图



问题原因
问题出在RoundedToggleButton的on_state方法中:当按钮状态切换为normal时,代码尝试启动self.hover_anim,但如果按钮从未被鼠标悬停过,hover_anim并未初始化,导致恢复原色的动画无法执行,按钮颜色停留在选中状态。
解决方案
修改RoundedToggleButton的on_state方法,在状态变为normal时直接创建并启动恢复原色的动画,不依赖未初始化的hover_anim变量。
修改后的代码
class RoundedToggleButton(ToggleButton, ToggleButtonBehavior, HoverBehavior): toggle_button_image = ObjectProperty(None) def __init__(self, **kwargs): super(RoundedToggleButton, self).__init__(**kwargs) self.down_anim = None self.hover_anim = None def on_press(self): pass def on_release(self): pass def on_state(self, widget, value): if value == "down": # 切换为选中状态时的动画 self.down_anim = Animation(col=(0, 134/255, 179/255, 1), duration=0.2) self.down_anim.start(self) else: # 切换为正常状态时直接启动恢复动画 self.normal_anim = Animation(col=(0, 191/255, 1, 1), duration=0.2) self.normal_anim.start(self) def on_enter(self, *args): self.hover_anim = Animation(col=(128/255, 223/255, 1, 1), duration=0.15) self.hover_anim.start(self) def on_leave(self): if self.state == "normal": self.hover_anim = Animation(col=(0, 191/255, 1, 1), duration=0.15) else: self.hover_anim = Animation(col=(0, 134/255, 179/255, 1), duration=0.15) self.hover_anim.start(self)
修改说明
- 在
on_state的normal分支中,直接创建新的动画实例并启动,确保无论按钮是否被悬停过,状态切换为正常时都会执行恢复原色的动画。 - 保留原有的鼠标悬停/离开动画逻辑,不影响其他交互效果。
内容的提问来源于stack exchange,提问作者f22daniel
相关产品推荐
相关产品推荐

