我有一个程序,在您单击操作按钮后会运行一个很长的过程。当进程正在运行时,根窗口会说它没有响应,即使我知道该程序正在后台运行。该程序将发布给与我一起工作的一些人,我想确保他们在看到此程序时不会惊慌失措并关闭窗口。我的解决方案是将 root.update 放在正在运行的进程的循环中,但我不确定这是最好的解决方案。
使用Python 3.3
这是代码示例,以便您了解我在做什么,这是从主循环调用的:
def combine(boxes_to, boxes_from, frame):
to_value,to_pos = gui.checkBoxes(boxes_to)
from_value,from_pos = gui.checkBoxes(boxes_from)
frame.destroy()
running = Label(root,text="Running please do not close..",font = (16))
running.pack()
root.update()
map_to = open("map_to",'r')
for line in map_to:
root.update()
process(line)
running.destroy()
map_to.close()
finish = Button(root, text="Done",command=gui.stop)
finish.pack()
虽然您可以在循环中调用 root.update() ,但这仍然会产生一些(可能)不良的副作用。
- 该程序可能运行缓慢,这意味着需要很长时间才能响应用户输入。
- 您将只能运行这一项操作。任何其他操作都必须等待此完成。
作为替代方案,我建议您实现简单的多线程。Python 多线程 https://code.google.com/p/pyloadtools/wiki/CodeTutorialMultiThreading非常简单,并且可以防止这两个缺点。您将能够执行长时间运行的代码,同时仍然提供干净且响应灵敏的用户界面。
如果您的应用程序可以轻松并行,则可以使用多个线程来减少运行时间。前任。线程 1 处理条目 1-100,而线程 2 处理条目 101-200。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)