Я создал простое приложение распознавателя DNS в PythonPython Tkinter удалить ярлыки, прежде чем они были добавлены
#!/usr/bin/env python
import dns.resolver
import socket
from Tkinter import *
import Tkinter
import tkMessageBox
# GUI
root = Tkinter.Tk()
root.geometry("1200x300")
root.title("DNS RESOLVER)
# User input name server, from web address
def InputNameServer():
NameServerEntryText = BoxTextNameServer.get()
answers = dns.resolver.query(NameServerEntryText,'NS')
var2 = 2
for server in answers:
DisplayTextNameServer = Label(root,text=server)
DisplayTextNameServer.grid(row = var2, column = 5)
var2 = var2 + 1
return
BoxTextNameServer = StringVar()
InputIPAddrButton = Button(root, text = "Get the name server",command = InputNameServer)
InputIPAddrButton.grid(row = 0, column = 5)
InputIPAddrEntry = Entry(root, textvariable=BoxTextNameServer)
InputIPAddrEntry.grid(row = 1, column = 5)
root.mainloop()
Основной предпосылкой является то, что пользователь вводит веб-адрес в текстовом поле, распознаватель затем должен получить серверы имен через импортированный DNS-резольвер и должны добавлять метки, спускаемые с разных серверов имен. Проблема в том, что я не могу удалить их, когда пользователь вводит новый веб-адрес и нажимает кнопку отправки. Я понимаю методы .grid_forget() и .destroy(), но не могу объявить переменную метки, а затем удалить их до запуска функции и снова напечатать метки поверх предыдущих. Извините, если у меня есть сложные вещи, вкратце введите адрес, нажмите «Отправить», напечатайте ярлыки, введите новый адрес, нажмите «Отправить», удалите предыдущие ярлыки, распечатайте новые ярлыки.
Можем ли мы получить рабочее MWE? Или просто описания? Из того, что я вижу, вы создаете новые ярлыки с текстом «THS», а затем сразу же уничтожаете те (которые должны удалить их из фрейма, находимся ли мы в кадре?), А затем добавляем новый ярлык под и рядом с ним с новым текстом, который никогда не получает уничтожены? Почему пустое возвращение? Мой совет состоит в том, чтобы иметь выделенный Frame для этого, иметь его как унаследованный объект Frame, то есть DNSNameFrame, и иметь у него метод destroy с 'для виджета в frame.winfo_children(): widget.destroy()' в нем. Вызовите этот метод перед печатью новых ярлыков. – ljetibo
Я отредактирую код соответственно –