单击某个操作按钮后,我有一个程序会运行很长时间。当进程正在运行时,即使我知道程序在后台运行,根窗口也会说它没有响应。该程序将发布给与我一起工作的一些人,我想确保他们在看到这些内容时不会 panic 并关闭窗口。我所拥有的解决方案是将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(),但这仍然会产生一些(潜在的)不良影响。

  • 该程序可能 Action 缓慢,这意味着需要很长时间才能响应用户输入。
  • 您将只能运行此操作。任何其他操作都必须等待此操作完成。

  • 作为替代方案,我建议您实现简单的多线程。 Python multithreading非常简单,可以避免这两个缺点。您将能够执行长时间运行的代码,同时仍提供干净且响应迅速的UI。

    如果您的应用程序几乎可以并行化,则可以使用多个线程来减少运行时间。前任。线程1处理条目1-100,而线程2处理条目101-200。

    关于python - Tkinter窗口说(不响应),但是代码正在运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18522171/

    10-12 16:20
    查看更多