Tkinter ttk.Button点击后保持凹陷,如何恢复凸起状态?
原因分析
你手动绑定了<Button-1>事件,绕过了ttk按钮自身的状态管理逻辑,加上弹出messagebox时可能干扰了按钮的焦点/状态重置流程,导致按钮停留在凹陷状态。
解决方案
方案1:改用command参数绑定事件(推荐)
ttk按钮的command参数是官方推荐的点击事件绑定方式,能自动处理按钮状态的重置:
cmd_defaults = ttk.Button(frame, text="Save defaults", takefocus=False, command=self._save_defaults) cmd_defaults.grid(row=coords.row, column=1, sticky=tk.SW) # 调整函数,移除event参数 def _save_defaults(self) -> None: # Save defaults to config ... result = self.config.save() if result == TomlConfig.status_OK: messagebox.showinfo(message='Defaults saved') else: lf = '\n' messagebox.showinfo(message=f'Defaults not saved{lf}{result}') return None
方案2:保留bind并手动修复状态
如果必须使用bind,可以在事件处理后手动重置按钮状态:
def _save_defaults(self, event) -> None: # Save defaults to config ... result = self.config.save() if result == TomlConfig.status_OK: messagebox.showinfo(message='Defaults saved') else: lf = '\n' messagebox.showinfo(message=f'Defaults not saved{lf}{result}') # 重置按钮按压状态并刷新界面 event.widget.state(['!pressed']) event.widget.update_idletasks() return "break"
额外说明
在KDE Fusion这类桌面环境下,ttk的主题渲染对按钮状态的管理逻辑依赖更强,使用官方推荐的command参数能避免大部分这类状态异常问题。
内容的提问来源于stack exchange,提问作者Psionman
相关产品推荐
相关产品推荐

