tkinter界面,有时候运行较大的循环或者其他情况时,会出现超时未响应的情况。
比如下面的代码:
from tkinter import * import time root=Tk() root.title=('Text插入文字') text=Text(root,height=3,width=30) text.pack() def insertit(): for i in range(1,100): text.insert(END,i) time.sleep(1) bt=Button(root,text='插入', command=insertit) bt.pack() root.mainloop()
这段代码在运行的时候,就会出现超时未响应的情况。这时候只能强制结束进程!
什么原因导致的?
这段代码出现未响应的情况可能是因为在 insertit()
函数中使用了 time.sleep(1)
,这会导致程序暂停1秒钟,而在此期间GUI界面无法响应用户的操作。如果想要避免这种情况,可以使用 after()
方法来实现延迟操作,而不会阻塞GUI界面的响应。
如何改正?
可以看下面的代码:
from tkinter import * import time root=Tk() root.title=('Text插入文字') text=Text(root,height=3,width=30) text.pack() def insertit(b): text.insert(END,b) if b<100: root.after(1000,insertit,b+1) bt=Button(root,text='插入', command=insertit(0)) bt.pack() root.mainloop()
这样改正之后,就不会出现超时未响应的情况了。
标签: Tkinter示例