我正在尝试制作一个简单的程序,不断显示和更新显示 CPU 使用率的标签,同时进行其他不相关的事情。
我已经做了足够的研究,知道线程很可能会涉及到。但是,我无法将我在简单的线程示例中看到的应用到我正在尝试做的事情上。
我目前正在做的事情:
import Tkinter
import psutil,time
from PIL import Image, ImageTk
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.labelVariable = Tkinter.StringVar()
self.label = Tkinter.Label(self,textvariable=self.labelVariable)
self.label.pack()
self.button = Tkinter.Button(self,text='button',command=self.A)
self.button.pack()
def A (self):
G = str(round(psutil.cpu_percent(), 1)) + '%'
print G
self.labelVariable.set(G)
def B (self):
print "hello"
if __name__ == "__main__":
app = simpleapp_tk(None)
app.mainloop()
在上面的代码中,我基本上试图让命令 A 持续运行,同时允许命令 B 在用户按下按钮时完成。
请您参考如下方法:
您永远不应尝试从非主线程的线程更改 UI 元素。
您可能想要的是 after(delay_ms, callback, args)。一些信息可以在http://www.pythonware.com/library/tkinter/introduction/x9507-alarm-handlers-and-other.htm结束.
作为示例,这里有一个显示时钟的快速脚本(注意:我从未真正使用过 Tk)。
from Tkinter import *
from time import strftime
class App(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.label_var = StringVar()
self.label = Label(self, textvariable=self.label_var)
self.label.pack()
# Start the loop
self.go()
def go(self):
self.label_var.set(strftime("%H:%M:%S"))
# The callback is only called once, so call it every time
self.after(1000, self.go)
app = App()
mainloop()
