gpt4 book ai didi

python - gtk idle_add 没有运行?

转载 作者:太空狗 更新时间:2023-10-30 02:14:10 25 4
gpt4 key购买 nike

我有一个双线程应用程序:GUI 和一些后台工作。我正在尝试向主线程发送请求以进行 GUI 更新(移动进度条),但它似乎不起作用。我把它归结为一个非常小的例子:

import pygtk
pygtk.require('2.0')
import glib
import gtk

import threading
import sys
import time

def idle():
sys.stderr.write('Hello from another world.\n')
sys.stderr.flush()
gtk.main_quit()

def another_thread():
time.sleep(1)
glib.idle_add(idle)

thread = threading.Thread(target=another_thread)
thread.start()
gtk.main()

我认为这应该从主/GUI 线程向标准错误打印一些内容,但什么也没有发生。而且它也不会退出,所以 gtk.main_quit 不会被调用。

此外,向 stderr 添加更多输出的行为很奇怪。如果我将线程的功能更改为:

sys.stderr.write('----\n')
sys.stderr.write('----\n')
sys.stderr.flush()
sys.stderr.write('After.\n')
sys.stderr.flush()

我看到 1,有时 2 行输出。主线程进入 gtk.main 看起来像是某种竞争条件,但我不知道为什么会这样。

最佳答案

在多线程环境中使用 glib 之前,您需要初始化 glib 的线程支持。只需调用:

glib.threads_init()

在调用 glib 函数之前。

关于python - gtk idle_add 没有运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com