/嗨,大家好!
目前,我正在尝试学习Python和Tkinter模块。
我的问题:
我有一个标签名称列表。对于我在for循环中创建的每个标签,我从该列表中分配名称,然后将其放置在新的labelList中,并在窗口中显示它们。之后,我需要能够根据自己的选择从窗口中删除其中一个标签(例如:名称为“ test2”和“ test3”的标签-我要删除,但仍应显示“ test1”)。我该怎么办?
from tkinter import *
root = Tk()
root.geometry("640x480")
root.resizable(0, 0)
labelNames = ["test", "test2", "test3"] # list of Label Names
labelList = [] # List of Labels
for labelName in labelNames:
myLabel = Label(root, text=labelName)
labelList.append(myLabel)
myLabel.pack()
for label in enumerate(labelList):
label[1].destroy() #I need to be able to remove label from window (by my chose), but instead it removing all of them.
root.mainloop()
`
使用dictionary
以其名称作为键来保存标签,然后您可以通过其名称查找标签。下面是一个示例程序:
import tkinter as tk
root = tk.Tk()
root.geometry('640x480')
root.resizable(0, 0)
lbl_frm = tk.Frame(root)
lbl_frm.pack()
# create the labels and save them to a dictionary
label_list = {}
for i in range(100):
name = f'test{i+1}'
lbl = tk.Label(lbl_frm, text=name, width=8)
lbl.grid(row=i//10, column=i%10)
label_list[name] = lbl
frm = tk.Frame(root)
frm.pack()
entry = tk.Entry(frm, width=10)
entry.pack(side=tk.LEFT, pady=5, padx=5)
def delete_label():
name = entry.get().strip()
if name:
if name in label_list:
print(f'label {name} deleted')
label_list[name].destroy() # use .grid_forget() if you want to recover the label
label_list.pop(name) # don't remove label from dict if you want to recover it
else:
print(f'label {name} not found')
tk.Button(frm, text='Delete Label', command=delete_label).pack(side=tk.LEFT)
root.mainloop()
使用dictionary
以其名称作为键来保存标签,然后您可以通过其名称查找标签。下面是一个示例程序:
import tkinter as tk
root = tk.Tk()
root.geometry('640x480')
root.resizable(0, 0)
lbl_frm = tk.Frame(root)
lbl_frm.pack()
# create the labels and save them to a dictionary
label_list = {}
for i in range(100):
name = f'test{i+1}'
lbl = tk.Label(lbl_frm, text=name, width=8)
lbl.grid(row=i//10, column=i%10)
label_list[name] = lbl
frm = tk.Frame(root)
frm.pack()
entry = tk.Entry(frm, width=10)
entry.pack(side=tk.LEFT, pady=5, padx=5)
def delete_label():
name = entry.get().strip()
if name:
if name in label_list:
print(f'label {name} delete')
label_list[name].destroy() # use .grid_forget() if you want to recover the label
label_list.pop(name) # don't remove label from dict if you want to recover it
else:
print(f'label {name} not found')
tk.Button(frm, text='Delete Label', command=delete_label).pack(side=tk.LEFT)
root.mainloop()