首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >线程化函数完成后,在主线程中调用函数

线程化函数完成后,在主线程中调用函数
EN

Stack Overflow用户
提问于 2020-09-24 06:17:05
回答 1查看 106关注 0票数 0

我正在构建一个Tkinter GUI,我有一个需要一段时间才能完成的过程,所以我对它进行了线程化处理,以防止GUI挂起。让我们调用线程化函数foo。一旦foo完成,我需要调用另一个函数bar。需要从主线程调用bar (它使用的matplotlib方法在线程内部不起作用)。

我似乎不能完全理解我该怎么做。我想加入线程,但这只会导致GUI挂起。我还想过使用一个信号变量,我会在foo的最后一行更改它,以告诉我的程序的其余部分它已经完成,是时候执行bar了,但是我不知道如何在不挂起图形用户界面的情况下在主线程中连续检查这个变量。有什么想法吗?

使用Python 3.7

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 09:13:31

您可以使用threading.Event()对象通知主线程,并使用after()定期调用函数来检查Event()对象,以确定何时调用bar()

下面是一个简单的例子:

代码语言:javascript
运行
复制
import tkinter as tk
import threading
import time

def foo(event):
    print('foo started')
    time.sleep(5)
    print('foo done')
    # notify main thread
    event.set()

def bar():
    print('hello')

def check_event(event, callback):
    print('.', end='')
    if event.is_set():
        # thread task is completed
        callback()
    else:
        # check again 100 ms (adjust this to suit your case) later
        root.after(100, check_event, event, callback)

root = tk.Tk()

# create the `Event()` object
event = threading.Event()
# start the checking
check_event(event, bar)
# start the thread task
threading.Thread(target=foo, args=(event,)).start()

root.mainloop()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64037017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档