python - 在Tkinter中,while循环导致整个程序崩溃
我正在尝试使用一个“While循环”来不断执行某个操作。目前,这个循环只会导致我的程序崩溃。
这是我的代码:
import tkinter
def a():
root = tkinter.Tk()
canvas = tkinter.Canvas(root, width=800, height=600)
while True:
print("test")
a()
这个循环会一直执行print
语句,但实际上画布就是打不开。
有没有什么可以和Tkinter一起工作的无限循环?
额外信息
当我去掉While True
这行代码时,画布又会重新出现。
1 个回答
19
Tkinter会卡住,除非它能执行自己的无限循环,也就是root.mainloop
。通常情况下,你不能让自己的无限循环和Tkinter的循环同时运行。不过,有一些替代的方法可以尝试:
使用 after
after
是一个Tkinter的方法,它可以让你指定一个函数在一定时间后执行。你可以让一个函数自己调用after
,这样它就会重复执行。
import tkinter
#this gets called every 10 ms
def periodically_called():
print("test")
root.after(10, periodically_called)
root = tkinter.Tk()
root.after(10, periodically_called)
root.mainloop()
还有一个方法是root.after_idle
,这个方法会在系统没有其他事件需要处理时立即执行目标函数。如果你需要更快的循环,比如每毫秒执行多次,这个方法可能更合适。
使用 threading
threading
模块允许你同时运行两段Python代码。通过这种方法,你可以让两个无限循环同时运行。
import tkinter
import threading
def test_loop():
while True:
print("test")
thread = threading.Thread(target=test_loop)
#make test_loop terminate when the user exits the window
thread.daemon = True
thread.start()
root = tkinter.Tk()
root.mainloop()
但要小心:如果在主线程以外的线程中调用Tkinter的方法,可能会导致程序崩溃或者出现奇怪的行为。