wordpress建站多个域名,做整体衣柜宣传海报的网站,做旅行的网站,类似wordpress博客系统这位同学#xff0c;首先无代码无真相。只能在这里猜测一下#xff0c;你在GUI界面中点击了某个按钮#xff0c;调用的函数然后触发了某种while循环#xff0c;这个时候前台GUI将“未响应”卡死。不过一旦调用函数的while循环结束#xff0c;GUI界面将再次可用。
不使用线…这位同学首先无代码无真相。只能在这里猜测一下你在GUI界面中点击了某个按钮调用的函数然后触发了某种while循环这个时候前台GUI将“未响应”卡死。不过一旦调用函数的while循环结束GUI界面将再次可用。
不使用线程的话后台while循环处理和前台GUI显示是依次串行的做完一件事情才能做另一件。使用线程是GUI通常的做法可以使后台while循环处理中的信息实时显示在前台GUI上。
关于tkiner的after方法只是将函数的调用时间向后延时一些进入调用的函数后与直接调用函数没有区别。
此外根据题主说的request的事情继续猜一下。首先来说下线程的事情处理request的线程不能这样使用
pThread(targeta_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
pThread(targeta_while_func_about_request, args(some_args))
p.start()
while request_done False:
# 继续处理主线程逻辑
...
else:
# 根据request内容进行显示
...
p.join()
# 子线程部分
def a_while_func_about_request(some_args):
# request获取内容部分
...
request_done True
2. GUI方面也需要根据程序逻辑设计
情况一在获取请求request内容的过程中GUI必须等待数据无法进行下一步操作类似玩游戏时等待读进度条无法跳过GUI也无需提供其它操作。这种情况可以在等待期间显示一个“处理中...”的进度条然后主线程定时检查request_done标志位可以使用到after方法等到request_done为True时主程序知道request获取完毕可以继续GUI后续的显示。
情况二在获取request内容时GUI继续显示某个主界面稍后通过某个“读取结果”的按钮对结果进行显示这样类似于游戏在读进度条的时候窗口切出去刷网页什么的过一会儿再切回来看看进度条是否读好了。这种情况下每次切回来看看进度条情况的相当于检查request_done标志位根据是否完成设计GUI后续的显示流程。