【发布时间】:2016-04-15 13:48:57
【问题描述】:
我用 Python 创建了一个简单的 DNS 解析器应用程序
#!/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 Resolver 获取名称服务器,并应添加各个名称服务器的标签。问题是当用户输入新网址并按下提交按钮时,我无法删除它们。我了解 .grid_forget() 和 .destroy() 方法,但无法声明标签变量,然后在函数运行之前删除它们,并在之前的顶部再次打印标签。 抱歉,如果我有复杂的事情,简而言之,输入地址,按提交,打印标签,输入新地址,按提交,删除以前的标签,打印新标签。
【问题讨论】:
-
我们可以得到一个工作的 MWE 吗?还是只是描述?从我看到你创建带有文本“THS”的新标签然后立即销毁那些(应该将它们从框架中删除,我们是否在框架中?),然后在它们下方和旁边添加一个新标签,其中包含永远不会得到的新文本毁了?为什么是空返回?我的建议是有一个专用的 Frame 来保存它,将它作为继承的 Frame 对象,即 DNSNameFrame,并让它有一个带有
for widget in frame.winfo_children(): widget.destroy()的销毁方法。在打印新标签之前调用该方法。 -
我会相应地编辑代码