gpt4 book ai didi

python - 如何在Python 3中使用轮询

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:24 24 4
gpt4 key购买 nike

我正在尝试显示/proc/stat 文件中的一些数据。由于这些数据不断变化,我想在屏幕上的每个时间间隔(3 秒)后更新这些值。如何使用 poll() 函数实现相同的效果?

编辑:我尝试使用线程和之后实现相同的目的。但我对它在 GUI 上的更新方式并不满意。下面是我的相同代码..

 def displayTab1(self):
self.slabel1=ttk.Label(self.page1,text=" User Mode : ")
self.slabel1.grid(row=1,column=1,sticky=E,pady=15,padx=5)

self.slabel2=ttk.Label(self.page1,text=" System Mode : ")
self.slabel2.grid(row=2,column=1,sticky=E,pady=15,padx=5)

self.slabel3=ttk.Label(self.page1,text=" Total CPU utilization : ")
self.slabel3.grid(row=3,column=1,sticky=E,pady=15,padx=5)
self.slabel31=ttk.Label(self.page1,text="%")
self.slabel31.grid(row=3,column=3,sticky=N+W,pady=15,padx=5)

self.slabel4=ttk.Label(self.page1,text=" No: of Interrupts : ")
self.slabel4.grid(row=4,column=1,sticky=E,pady=15,padx=5)

self.slabel5=ttk.Label(self.page1,text=" Context Switches : ")
self.slabel5.grid(row=5,column=1,sticky=E,pady=15,padx=5)

self.slabel6=ttk.Label(self.page1,text=" Total Memory : ")
self.slabel6.grid(row=6,column=1,sticky=E,pady=15,padx=5)

self.slabel7=ttk.Label(self.page1,text=" Available Memory : ")
self.slabel7.grid(row=7,column=1,sticky=E,pady=15,padx=5)

self.slabel8=ttk.Label(self.page1,text=" Memory Utilization: ")
self.slabel8.grid(row=8,column=1,sticky=E,pady=15,padx=5)

self.book.grid()

t1 = threading.Thread(target=self.tab1_Layout, args = ())
t1.daemon = True
t1.start()

    def tab1_Layout(self):
self.MemFile = open('/proc/meminfo','r').readlines()
for line in self.MemFile:
if line.startswith('MemTotal:'):
self.MemTotal = int(line.split()[1])
if line.startswith('MemAvailable:'):
self.MemAvail = int(line.split()[1])
break
MemTotal=self.MemTotal
MemAvail=self.MemAvail
VarS=System.SystemInfo(self.usr_prev,self.sys_prev,self.idle_prev)
self.usr_cur,self.sys_cur,self.idle_cur,usermode,sysmode,totalcpu,intr,ctxt,MemUtil= VarS.deltaTime()
self.usrmodeVal = ttk.Label(self.page1,text = usermode)
self.sysmodeVal = ttk.Label(self.page1,text = sysmode)
self.totcpuVal = ttk.Label(self.page1,text = totalcpu)
self.intrVal = ttk.Label(self.page1,text = intr)
self.ctxtVal = ttk.Label(self.page1,text = ctxt)
self.MemTotalVal = ttk.Label(self.page1,text = MemTotal)
self.MemAvailVal = ttk.Label(self.page1,text = MemAvail)
self.MemUtilVal = ttk.Label(self.page1,text = MemUtil)

self.usrmodeVal.grid(row=1,column=2,sticky=W+E+N+S,padx=5,pady=5)
self.sysmodeVal.grid(row=2,column=2,sticky=W+E+N+S,padx=5,pady=5)
self.totcpuVal.grid(row=3,column=2,sticky=W+E+N+S,padx=5,pady=5)

self.intrVal.grid(row=4,column=2,sticky=W+E+N+S,padx=5,pady=5)
self.ctxtVal.grid(row=5,column=2,sticky=W+E+N+S,padx=5,pady=5)
self.MemTotalVal.grid(row=6,column=2,sticky=W+E+N+S,padx=5,pady=5)
self.MemAvailVal.grid(row=7,column=2,sticky=W+E+N+S,padx=5,pady=5)
self.MemUtilVal.grid(row=8,column=2,sticky=W+E+N+S,padx=5,pady=5)

self.page1.after(I,self.tab1_Layout)

最佳答案

您的代码的主要问题是您不断创建越来越多的小部件。不要那样做。创建一次小部件,然后更新它们。

您还存在使用线程并尝试在多个线程中使用小部件命令的问题。 Tkinter 不是线程安全的,在两个单独的线程中与小部件交互将产生不可预测的结果。

这是一个工作示例,不过我删除了一些小部件以使代码更易于理解:

from Tkinter import *
import ttk

class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.page1 = Frame(self)
self.page1.pack(fill="both", expand=True)
self.tab1_Layout()
self.tab1_Update()

def tab1_Update(self):
self.MemFile = open('/proc/meminfo','r').readlines()
self.MemTotal = self.MemAvail = 0
for line in self.MemFile:
if line.startswith('MemTotal:'):
self.MemTotal = int(line.split()[1])
if line.startswith('MemAvailable:'):
self.MemAvail = int(line.split()[1])

self.MemTotalVal.configure(text=self.MemTotal)
self.MemAvailVal.configure(text=self.MemAvail)

self.after(1000, self.tab1_Update)

def tab1_Layout(self):
self.MemTotalVal = ttk.Label(self.page1, width=10)
self.MemAvailVal = ttk.Label(self.page1, width=10)

self.MemTotalVal.grid(row=6,column=2,sticky=W+E+N+S,padx=5,pady=5)
self.MemAvailVal.grid(row=7,column=2,sticky=W+E+N+S,padx=5,pady=5)

if __name__ == "__main__":
root = Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()

关于python - 如何在Python 3中使用轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33044943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com