在Tkinter的背景中运行无限循环

scr*_*ddy 4 python loops tkinter

我希望代码在后台运行并定期更新我的GUI.我怎么能做到这一点?

例如,假设我想在GUI代码的后台执行类似的操作,您可以在下面看到:

x = 0

while True:
   print(x)
   x = x + 1
   time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

这是GUI代码:

class GUIFramework(Frame):

    def __init__(self,master=None):
        Frame.__init__(self,master)
        self.master.title("Volume Monitor")
        self.grid(padx=10, pady=10,sticky=N+S+E+W)
        self.CreateWidgets()

    def CreateWidgets(self):
        textOne = Entry(self, width=2)
        textOne.grid(row=1, column=0)

        listbox = Listbox(self,relief=SUNKEN)
        listbox.grid(row=5,rowspan=2,column=0,columnspan=4,sticky=N+W+S+E,pady=5)
        listbox.insert(END,"This is an alert message.")

if __name__ == "__main__":
    guiFrame = GUIFramework()
    guiFrame.mainloop()
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 8

有点不清楚你的顶部代码应该做什么,但是,如果你只想每秒调用一个函数(或你想要的每一秒),你可以使用该after方法.

所以,如果你只是想做点什么textOne,你可能会做以下事情:

...
textOne = Entry(self, width=2)
textOne.x = 0

def increment_textOne():
    textOne.x += 1

    # register "increment_textOne" to be called every 1 sec
    self.after(1000, increment_textOne) 
Run Code Online (Sandbox Code Playgroud)

您可以将此函数作为您的类的方法(在本例中我称之为callback),您的代码将如下所示:

class Foo(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.x = 0
        self.id = self.after(1000, self.callback)

    def callback(self):
        self.x += 1
        print(self.x)
        #You can cancel the call by doing "self.after_cancel(self.id)"
        self.id = self.after(1000, self.callback)  

gui = Foo()
gui.mainloop()
Run Code Online (Sandbox Code Playgroud)