显示加载栏,直到函数返回值

时间:2019-05-19 10:20:40

标签: python multithreading tkinter

我正在使用Python3和Tkinter构建GUI。我有一个正在运行一段时间的函数,然后返回一个元组。在运行时,GUI冻结。我想避免这种情况,并显示进度条(充满后会重复显示)。我四处搜寻并获得了一些帮助,但是,我很难将所有部分放在一起。因此,作为一种方案,事情应该像这样:

  1. 启动工作功能
  2. 显示进度栏循环
  3. 函数返回时,终止进度栏窗口

进度条有效,我从书中获得了代码,请参阅:

p = ProgressDialog(master = parent, text = "", title = "Operation running")
def _do_progress():
    i = 1
    while True:
        time.sleep(0.03)
        p.set_progress(i*10)
        if i < 10:
            i += 0.05
        else:
            i = 0
    p.done(0)

如您所见,此进度条将一直运行到某个时间点被杀死为止。我知道我需要线程模块来这样做。有人可以给我一个提示,让我知道如何构造程序吗?非常感谢。

编辑:
因此,首先,这里是一个使用线程的示例。让我们暂时忽略加载栏,仅关注主线程问题。

def runboot(data, CONFIG):
    qq = mp.Queue()
    t = mp.Process(target = bc.multiboot, args = (qq, data, functouse))
    t.start()
    results = qq.get(True)
    t.join()
    showresults(results)

最后显示正确的结果,但是GUI仍然冻结。为什么?我将主要任务发送到新线程吗?

0 个答案:

没有答案