我用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解析程序获取名称服务器,并添加各个名称服务器的标签。问题是当用户输入一个新的网址并按下提交按钮时,我无法删除它们。我了解.grid_forget()和.destroy()方法,但无法声明label变量,然后在函数运行之前删除它们,并在前面的方法之上再次打印标签。 抱歉,如果我有太复杂的事情,简而言之,输入地址,按提交,打印标签,输入新地址,按提交,删除以前的标签,打印新标签。在
仍然很难有一个最小的工作的例子,当我丢失了个人dns解析器模块。下一次,只要放入一个替代函数,它就会返回一些与你所问问题无关的东西。在
不管怎样,这就是我所说的:
它比人们用来做Tkinter的一般单片方式要长一点,但我发现它更简单,而且只需额外增加一个
__init__
函数的成本。另外,每个Frame子类可以放在不同的文件中,然后导入到主窗口中,这减少了处理Tk时通常的混乱。在分离GUI的逻辑工作单元有助于您单独处理每个逻辑工作单元,这更容易。在
你最感兴趣的部分应该是DNSNameFrame。每次更新表之前,都要清除表。您可以通过从ServerInputFrame获取
servername
来填充表,该表位于大型机self.parent
上。你把它发送到你的dns模块并检索一些结果。循环该结果并粘贴适当的服务器名。当我这样做的时候,我把它做成了一个表,但是现在我看到你只有一个列表,它应该仍然很容易修改代码以满足你的需要。在适用于iPython2.7笔记本,Win7x64。在
相关问题 更多 >
编程相关推荐