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

Tkinter动态添加删除Entry与Button组件问题求助

问题修复方案

原代码的核心问题

  • Entry输入框直接绑定到主窗口root,所有新增的Entry都会叠加在同一位置,导致看起来没创建
  • Row这个Frame组件初始化时未指定父容器,内部的Delete按钮所在的Frame没有正确挂载到主窗口
  • 布局逻辑混乱,Row内部组件和主窗口的grid布局冲突

修正后的代码

from tkinter import *

class App():
    def __init__(self, root):
        self.root = root
        self.rows =[]

        self.addboxButton = Button(root, text='<Add>', command=self.addBox)
        self.addboxButton.grid(row=0, column=0, padx=5, pady=5)
        
    def addBox(self):
        new_row = Row(self, self.root)
        self.rows.append(new_row)
        # 渲染所有行,保证每一行占主窗口的独立行
        for idx, row in enumerate(self.rows):
            row.grid(row=idx + 1, column=0, sticky=W, padx=5, pady=2)
    
    def delete_row(self, row):
        # 删除指定行并重新渲染剩余行
        self.rows.remove(row)
        row.destroy()
        for idx, row in enumerate(self.rows):
            row.grid(row=idx + 1, column=0, sticky=W, padx=5, pady=2)

class Row(Frame):
    def __init__(self, parent_app, main_frame):
        # 为Row指定父容器,确保组件能正确显示在主窗口
        super().__init__(main_frame)
        self.parent_app = parent_app

        # 将Entry设为当前Row的子组件,避免叠加
        self.entryRowVar = StringVar()
        self.entryRow = Entry(self, textvariable=self.entryRowVar)
        self.entryRow.grid(row=0, column=0, padx=(0, 5))
        
        # 绑定删除当前行的逻辑
        self.del_btn = Button(self, text='Delete', command=self.delete_self)
        self.del_btn.grid(row=0, column=1)
    
    def delete_self(self):
        self.parent_app.delete_row(self)

if __name__ == "__main__":
    root = Tk()
    root.title("动态添加输入框")
    app = App(root)
    root.mainloop()

关键修改说明

  1. 调整组件层级:把Entry的父容器从root改成Row实例,每个Entry都属于对应的行Frame,不会出现叠加问题
  2. 正确初始化Frame:Row类初始化时通过super().__init__(main_frame)指定父容器,让Row组件能正确挂载到主窗口
  3. 统一布局逻辑:主窗口中每一行Row占独立的grid行,Row内部用column0放Entry、column1放Delete按钮,布局清晰无冲突
  4. 添加删除功能:给Delete按钮绑定删除当前行的逻辑,删除后重新渲染剩余行,保证行号连续

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:40:25