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

Tkinter ttk.Button点击后保持凹陷,如何恢复凸起状态?

解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:50:57