You need to enable JavaScript to run this app. 如何实现Tkinter点击按钮在其上方新增Entry组件且按钮自动下移
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Tkinter点击按钮在其上方新增Entry组件且按钮自动下移

实现方案

这个功能可以直接实现,修改后的完整可运行代码如下:

from tkinter import *

root = Tk()
playerFrame = Frame(root)

# 初始已经有7行,按钮初始在第7行,所以下一个新增行的行号从7开始
next_row = 7

#Players' numbers and names / Numeros e nomes dos jogadores
pnum1 = Label(playerFrame, text="1").grid(column=0, row=0)
pnum2 = Label(playerFrame, text="2").grid(column=0, row=1)
pnum3 = Label(playerFrame, text="3").grid(column=0, row=2)
pnum4 = Label(playerFrame, text="4").grid(column=0, row=3)
pnum5 = Label(playerFrame, text="5").grid(column=0, row=4)
pnum6 = Label(playerFrame, text="6").grid(column=0, row=5)
pnum7 = Label(playerFrame, text="7").grid(column=0, row=6)

player1 = Entry(playerFrame).grid(column=1, row=0)
player2 = Entry(playerFrame).grid(column=1, row=1)
player3 = Entry(playerFrame).grid(column=1, row=2)
player4 = Entry(playerFrame).grid(column=1, row=3)
player5 = Entry(playerFrame).grid(column=1, row=4)
player6 = Entry(playerFrame).grid(column=1, row=5)
player7 = Entry(playerFrame).grid(column=1, row=6)

#Function for the addPlayer button / Função para o botão addPlayer
def AddPlayer():
    global next_row
    # 新增左侧序号标签
    Label(playerFrame, text=str(next_row + 1)).grid(column=0, row=next_row)
    # 新增输入框
    Entry(playerFrame).grid(column=1, row=next_row)
    # 按钮下移一行
    addPlayer.grid(column=1, row=next_row + 1)
    # 更新下一次的行号
    next_row += 1

# 先创建按钮对象,再单独调用grid,不要链式调用
addPlayer = Button(playerFrame, text="Add player / Adicionar jogador", command=AddPlayer)
addPlayer.grid(column=1, row=next_row)

playerFrame.pack(side=TOP, anchor=NW)

root.mainloop()

核心改动说明

  • 新增了next_row全局变量跟踪下一个待插入行的位置
  • 拆分了按钮的创建和grid调用,避免丢失按钮对象导致后续无法修改布局位置
  • AddPlayer函数内每次先在当前next_row位置插入新的序号标签和输入框,再将按钮移动到下一行,最后更新next_row的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:27:01