【发布时间】:2019-01-14 14:01:36
【问题描述】:
每个人。我是 Python 的新手,并试图学习它,因为我未来的工作需要我知道它。我在玩 Tkinter,试图让一个 ping 脚本工作。此脚本的结果将在第 0 列中显示服务器列表,并在第 1 列中显示它是向上还是向下的列表。除了一件事外,我让它工作:小部件重叠,导致此脚本成为内存占用。例如,如果网站“google.com”响应“UP”并且我关闭了我的互联网,它将显示为“DOWN”。但是,一旦重新插入我的互联网,它就会显示为“UP”,但我可以看到标签后面的“DOWN”字样。我尝试了不同的方法在每次使用之前销毁小部件,但无法让它工作。我理解我的代码是否有点混乱,所以我绝对愿意接受批评。下面是我在“主机”变量中列出的几个示例站点的代码:
import pyping
import Tkinter as tk
from Tkinter import *
import time
host = ["google.com", "yahoo.com", "espn.com"]
root = tk.Tk()
class PingTest:
result = []
resultfc = []
def __init__(self, hostname, inc):
self.hostname = hostname
self.inc = inc
self.ping(hostname)
def results(self, result1, resultfc1):
self.result = result1
self.resultfc = resultfc1
def ping(self, y):
self.y = y
q = ""
try:
x = pyping.ping(self.y, count=1)
q = x.ret_code
except Exception:
pass
finally:
if q == 0:
self.results("UP", "green")
else:
self.results("DOWN", "red")
self.window()
def window(self):
self.label1 = Label(root, text=self.hostname)
self.label2 = Label(root, text=self.result, fg=self.resultfc, bg="black")
a = Label(root, text=self.hostname)
b = Label(root, text=self.result, fg=self.resultfc, bg="black")
b.update()
b.update_idletasks()
if b == TRUE:
b.grid_forget() # These two lines don't seem to help my cause
b.destroy()
a.grid(row=self.inc, column=0)
b.grid(row=self.inc, column=1)
while TRUE:
i = 0
for h in host:
PingTest(h, i)
i += 1
time.sleep(1)
【问题讨论】:
-
b是一个小部件。if b == True:不可能做任何事情,因为小部件不是布尔值。b是小部件的新 版本,无论如何:如果你确实销毁了它,那么窗口中将看不到任何东西。在用新的小部件重新分配这些变量之前,您要销毁的是旧小部件(self.label1、self.label2)。 -
与其尝试销毁小部件,不如简单地创建一个标签列表,然后更新它们的状态
-
这里有几个问题。
.update_idletasks()/time.sleep(1)而不是.mainloop()/.after(1000, ..,)。在while循环中创建对象PingTest(。创建无用的对象self.label1 = Label(...
标签: python python-2.7 tkinter