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))
我正在尝试在 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))