如何实现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
相关产品推荐
相关产品推荐

