这位同学,首先无代码无真相。只能在这里猜测一下,你在GUI界面中点击了某个按钮,调用的函数然后触发了某种while循环,这个时候前台GUI将“未响应”卡死。不过一旦调用函数的while循环结束,GUI界面将再次可用。
不使用线程的话,后台while循环处理和前台GUI显示是依次串行的,做完一件事情才能做另一件。使用线程是GUI通常的做法,可以使后台while循环处理中的信息实时显示在前台GUI上。
关于tkiner的after方法,只是将函数的调用时间向后延时一些,进入调用的函数后与直接调用函数没有区别。
此外,根据题主说的request的事情,继续猜一下。首先来说下线程的事情,处理request的线程不能这样使用
p=Thread(target=a_while_func_about_request, args=(some_args))
p.start()
p.join()
这样使用线程虽然将主线程的while循环移到线程p的内部,但由于主线程一直等待p.join()什么也做不了,相当于主线程直接调用了a_while_func_about_request函数。要利用到线程的并发性能,主线程不能傻傻的p.join(),至少还需要一个标志变量,通过标志变量判断线程p是否完成request请求,例如:
# 主线程
request_done = False
p=Thread(target=a_while_func_about_request, args=(some_args))
p.start()
while request_done == False:
# 继续处理主线程逻辑
...