我运行了一个BASH脚本,它打开一个程序(tshark),它将一堆值写入日志文件。然后,该脚本对唯一值进行计数,并将最近3分钟的唯一值(的计数)写入日志文件(count3m.log)。它还会打开一个python脚本。 python用于显示一个带有count3m.log值的窗口。由于count3m.log中的值每30秒更改一次,我想继续从count3m中查找新值。我尝试使用下面的代码。它只执行一次循环。我做错了什么?
#!/usr/bin/env python
import sys
import re
import time
from Tkinter import *
while True:
root = Tk()
count3m = open('count3m.log','r')
countStart = open('countStart.log','r')
minutes = Label(root, text="Uniq signals < 3m ago:")
minutes.grid(row=0, column=0)
minutes = Label(root, text=count3m.read())
minutes.grid(row=1, column=0)
count3m.close
minutes = Label(root, text="Uniq signals since start:")
minutes.grid(row=0, column=1)
minutes = Label(root, text=countStart.read())
minutes.grid(row=1, column=1)
countStart.close
time.sleep(5)
print "test"
root.mainloop()
答案 0 :(得分:2)
引用此answer
mainloop实际上只是一个看起来大致如此的无限循环(那些不是方法的实际名称,这些名称只是用来说明这一点):
while True:
event=wait_for_event()
event.process()
if main_window_has_been_destroyed():
break
所以,你的循环中有一个无限循环。
要更新标签,您需要将事件附加到根目录。另外,设置标签&text;文本变量= StringVar。然后,更新事件中的StringVar,它将更改标签。
像这样的东西
text = StringVar()
label = Label(root, textvariable=text).pack()
def update_label():
text.set("new stuff")
#update again
root.after(SOME_TIME, update_label)
#the first update
root.after(SOME_TIME, update_label)
root.mainloop()
这应该给你基本的想法。关联堆栈溢出问题: