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

如何在Tkinter中销毁被点击的按钮而非最后添加的按钮?

问题分析与修复方案

问题原因

你的代码里用self.button单个变量存储新增的按钮,每次创建新按钮时都会覆盖这个变量的指向。所以调用destroy_button时,始终只会销毁最后创建的那个按钮,无法定位到被点击的目标按钮。

修复方法

我们需要在创建按钮时,把当前按钮的引用绑定到它的点击命令上,让销毁方法能准确获取到被点击的按钮。以下是修改后的完整代码:

import tkinter as tk

class Programm(tk.Tk):
    
    def __init__(self):
        super().__init__()
        
        self.add_button = tk.Button(self, text="Add Button", command=self.button_add)
        self.add_button.grid(row=0, column=0)
        
        self.button_count = 1

    def button_add(self):
        # 创建当前按钮并赋值给局部变量
        current_btn = tk.Button(self, text=f"Number {self.button_count}")
        # 绑定销毁命令,把当前按钮作为参数传入
        current_btn.config(command=lambda btn=current_btn: self.destroy_button(btn))
        current_btn.grid(row=self.button_count, column=0)
        
        self.button_count += 1

    def destroy_button(self, btn):
        # 销毁传入的目标按钮
        btn.destroy()
            
def main():
    root = Programm()
    root.mainloop()
    
if __name__ == "__main__":
    main()

关键改动说明

  1. 创建按钮时用局部变量current_btn存储当前实例,避免覆盖全局的self.button
  2. 通过lambda btn=current_btn把当前按钮的引用绑定到命令中,确保点击时能传递正确的按钮实例给销毁方法
  3. 修改destroy_button方法,接收按钮参数并直接销毁该按钮

这样每次点击新增的按钮时,都会销毁被点击的那个按钮,符合预期效果。

内容的提问来源于stack exchange,提问作者Kai_hismelf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:12:12