Как удалить некоторые метки Tkinter из списка и отобразить только одну - PullRequest
0 голосов
/ 15 января 2020

/ Привет, ребята!

В настоящее время я пытаюсь изучить Python и модуль Tkinter.

Моя проблема:

У меня есть список имен меток. Для каждой метки, которую я создаю для l oop, я назначаю имя из этого списка, помещаю их в новый 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()

`

1 Ответ

0 голосов
/ 15 января 2020

Используйте 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()
...