Python tkinter - 删除带有关联按钮的单个标签

Python tkinter - Delete individual labels with associated buttons

我正在尝试在 GUI 中输入文本并使用输入的文本制作标签。我正在创建的标签旁边创建按钮。 当按下这些按钮时,我想删除与这些按钮关联的标签。我该怎么做?

目前我有一些代码如下:

import tkinter as tk

chosenvarlabel = []
cancelbutton = []
label_relyPlacement = 0.4   # these allow variables to be displayed one below the other after #confirmation
label_relyIncrement = 0.0

root = tk.Tk()

IntroCanvas = tk.Canvas(height = 300, width = 300)
IntroCanvas.pack()

def cancel():
    pass
#     chosenvarlabel[cancelbutton[]].place_forget()  # unable to pass index here

def choose():
    global label_relyIncrement, chosenvarlabel, cancelbutton
    var1 = varentry1.get()
    var2 = varentry2.get()
    label_relyIncrement = label_relyIncrement + 0.1
    chosenvarlabel.append(tk.Label(root, text = var1 + " " + var2))
    chosenvarlabel[len(chosenvarlabel)-1].place(relx = 0.1, rely = label_relyPlacement + label_relyIncrement)
    cancelbutton.append(tk.Button(root, text = '   X', command = cancel))
    cancelbutton[len(chosenvarlabel)-1].place(relx = 0.6, rely = label_relyPlacement + label_relyIncrement)

varentry1 = tk.Entry(width = 6)
varentry1.place(relx = 0.2, rely = 0.2)

varentry2 = tk.Entry(width = 6)
varentry2.place(relx = 0.4, rely = 0.2)


myButton = tk.Button(root, text ='choose', command = choose)
myButton.place(relx = 0.6, rely = 0.2)

root.mainloop()

我在想,因为每个按钮都会在 'cancelbutton' 列表中,如果我以某种方式将此按钮的索引传递给函数 'cancel',列表 chosenvarlabel 中相同索引的标签将被删除。

但是我无法使用 cancelbutton.index()

获取索引

创建的取消按钮列表是:

[<tkinter.Button object .!button2>,
 <tkinter.Button object .!button3>,
 <tkinter.Button object .!button4>]

但是 'index' 无法访问这些元素。这是为什么?我该怎么做?

谢谢

R

如果单击按钮时删除关联标签是唯一的任务,则不需要这两个列表,您只需将标签引用(以及按钮引用?)传递给 cancel()功能如下:

def cancel(btn, lbl):
    # btn.destroy() # destroy the button as well???
    lbl.destroy()

def choose():
    global label_relyIncrement
    var1 = varentry1.get()
    var2 = varentry2.get()
    label_relyIncrement += 0.1
    lbl = tk.Label(root, text=var1+' '+var2)
    lbl.place(relx=0.1, rely=label_relyPlacement+label_relyIncrement)
    btn = tk.Button(root, text='X')
    btn.place(relx=0.6, rely=label_relyPlacement+label_relyIncrement)
    btn.config(command=lambda: cancel(btn, lbl))