Tkinter窗口显示(没有响应),但代码正在运行

2024-04-20 03:05:34 发布

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

我有一个程序,在你点击一个操作按钮后运行一个很长的过程。当进程运行时,根窗口会说它没有响应,即使我知道程序是在后台运行的。这个程序将发布给我的几个同事,我想确保他们看到这个时不会惊慌失措,关上窗户。我的解决方案是在正在运行的进程的循环中设置一个root.update,但我不确定这是否是最好的解决方案。

使用Python3.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()

Tags: tofrompos程序map进程valueupdate
1条回答
网友
1楼 · 发布于 2024-04-20 03:05:34

虽然可以在循环中调用root.update(),但这仍然会产生一些(潜在的)不良副作用。

  1. 程序可能会延迟,这意味着需要很长时间才能响应用户的输入。
  2. 您将只能运行此操作。任何其他操作都必须等待此操作完成。

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

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

相关问题 更多 >