如何从列表中删除一些Tkinter标签并仅显示剩余的一个

问题描述 投票:0回答:1

/嗨,大家好!

目前,我正在尝试学习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()

`

python user-interface tkinter label
1个回答
0
投票

使用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()

0
投票

使用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()
© www.soinside.com 2019 - 2024. All rights reserved.