【问题标题】:Python tkinter - Delete individual labels with associated buttonsPython tkinter - 删除带有关联按钮的单个标签
【发布时间】:2020-06-10 00:05:39
【问题描述】:

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

我在想,因为每个按钮都在“取消按钮”列表中,如果我将此按钮的索引以某种方式传递给函数“取消”,则列表 selectedvarlabel 中相同索引的标签将被删除。

但我无法使用 cancelbutton.index() 获取索引

创建的取消按钮列表是:

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

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

谢谢

R

【问题讨论】:

  • 您可以将标签引用传递给 cancel() 函数。
  • 如何在不知道其索引的情况下获取特定标签的参考?

标签: button tkinter label


【解决方案1】:

如果单击按钮时删除关联的标签是唯一的任务,那么这两个列表不是必需的,您可以将标签引用(以及按钮引用?)传递给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))

【讨论】:

  • 这很酷。谢谢!你能解释一下 btn.config 的最后一行吗?单个按钮如何与其标签关联? command=lambda 有什么作用?我读过 lambda 函数,但不太了解。
  • 由于我需要按钮引用,所以我在创建按钮时无法设置command选项,因为该按钮目前不存在。创建按钮后,我使用btn.config(command=...) 行来设置命令选项。 lambda 是匿名函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2018-09-16
相关资源
最近更新 更多