我有一个在python2.7.10中使用Tkinter构建的GUI程序。在
它是完美的,因为不管怎样这都是根本原因。在
不幸的是,当与它交互时,它会短暂地进入windows害怕的“无响应”状态。在
简而言之,布局如下:
启动脚本启动主脚本。 主脚本读取设置文件并引导GUI脚本。 GUI脚本启动GUI。 用户输入要在一系列文件中搜索的术语。 GUI脚本进入一个side脚本来处理文件和检索结果。 Side脚本继承GUI脚本的某些方面。 Side脚本在使用继承的元素时尝试更新用户;GUI没有这些元素。 在返回到GUI脚本并显示结果之前,GUI短暂地没有响应。在
简而言之,我需要这样做:
启动脚本启动主脚本。 主脚本读取设置文件并引导GUI脚本。 GUI脚本启动GUI。 用户输入要在一系列文件中搜索的术语。 GUI脚本进入一个side脚本来处理文件和检索结果。 Side脚本继承GUI脚本的某些方面。 边脚本使用GUI元素在工作时用进度条和图像更新用户。 GUI返回到GUI脚本并显示结果。在
我已经建立了进度条,但图像还没有,但是如果进度条不起作用,我就不会在图像上浪费时间。在
样品不可能,未使用但显示点代码; 图形用户界面
import Tkinter, PIL, SideScript1
Tkinter()
ShowText()
ShowStuff()
input = GetInput()
ShowProgressBar()
SideScript1.processfilesbasedoninput(input, progressbarcontrolvar)
DisplayResults()
侧脚本1
^{pr2}$我想我的问题是,如何让GUI更新这些元素,而不是失去意识?在
我们正在讨论10万个文件,1.5秒就搞定了。在
更新:此问题已标记为另一个问题的副本。它是?是的。但这是因为我(现在仍然)不确定如何搜索这类问题,还有三个解决方案:multithreading
,multiprocessing
,以及更小的任务。不幸的是,这个程序是在一个线程和进程上运行的,如果没有完全重写,获得预期的GUI响应将导致巨大的减速,如果它能工作的话。在
我确实看到了问题,成为TKinter是一个阻塞模块。不幸的是,我对如何在不造成大量错误,或者完全重写的情况下取消阻止它的想法已经没有了。在
这个连在一起的重复问题有一个答案。一个不好的答案,但仍然是一个答案。在
update_idletasks
。在我试过了,而且成功了!好。某种程度上。在
一开始它起作用了,后来又出现了同样的结果。GUI暂时冻结。在
然后我突然想到一个主意。为什么不试试
update
?在我这样做了,而且它按我需要的方式工作,但是,它的性能有了很大的提高——几乎与
update_idletasks
相同。在为了解决这个新问题,我增加了一点数学运算,使更新发生,在我的例子中,每300个文件,而不是每一个文件平衡性能损失和用户不会立即删除我的程序,因为是的,这会消耗你的资源。不,我一开始没有注意到这个建议。先开枪,再问问题,对吧?在
我怎么用的?很高兴我问你!这里有一个例子
我不确定所有的后端和硬性事实,但是
update()
似乎比update_idletasks()
更方便用户,也更不容易出错和速度减慢。在我的恶作剧现在又恢复了秩序,60分钟内(30分钟?120?2.5亿??)帧一秒,顺利和高效-Tk不再有坐下来罢工每次我问它的信息!在
感谢@Rawing的帮助!在
相关问题 更多 >
编程相关推荐