TkInter;被告知upd时无反应

2024-10-16 17:20:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在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秒就搞定了。在

更新:此问题已标记为另一个问题的副本。它是?是的。但这是因为我(现在仍然)不确定如何搜索这类问题,还有三个解决方案:multithreadingmultiprocessing,以及更小的任务。不幸的是,这个程序是在一个线程和进程上运行的,如果没有完全重写,获得预期的GUI响应将导致巨大的减速,如果它能工作的话。在

我确实看到了问题,成为TKinter是一个阻塞模块。不幸的是,我对如何在不造成大量错误,或者完全重写的情况下取消阻止它的想法已经没有了。在


Tags: 文件进度条用户图像程序脚本元素input
1条回答
网友
1楼 · 发布于 2024-10-16 17:20:16

这个连在一起的重复问题有一个答案。一个不好的答案,但仍然是一个答案。在

update_idletasks。在

我试过了,而且成功了!好。某种程度上。在

一开始它起作用了,后来又出现了同样的结果。GUI暂时冻结。在

然后我突然想到一个主意。为什么不试试update?在

我这样做了,而且它按我需要的方式工作,但是,它的性能有了很大的提高——几乎与update_idletasks相同。在

为了解决这个新问题,我增加了一点数学运算,使更新发生,在我的例子中,每300个文件,而不是每一个文件平衡性能损失和用户不会立即删除我的程序,因为是的,这会消耗你的资源。不,我一开始没有注意到这个建议。先开枪,再问问题,对吧?在

我怎么用的?很高兴我问你!这里有一个例子

#GUI Code
DoStuff()
SideScript1.proccessdata(arg, kwarg, debate)
DoMoreStuff()

#File Management Code
DoStuff()
filenumber = 0
maxfilenumber = 0
for every file I need to search:
    SearchFile()
    filenumber +=1
    if filenumber == maxfilenumber:
        tkinter.update() #in my case, it was tkinst, or "TkInter Instance", since it was inherited from the GUI attributes.
        filenumber = 0
    if data is what I want:
        break
return data

我不确定所有的后端和硬性事实,但是update()似乎比update_idletasks()更方便用户,也更不容易出错和速度减慢。在

我的恶作剧现在又恢复了秩序,60分钟内(30分钟?120?2.5亿??)帧一秒,顺利和高效-Tk不再有坐下来罢工每次我问它的信息!在

感谢@Rawing的帮助!在

相关问题 更多 >