可能重复:
请简单的 pygtk 和线程示例
我的 python 脚本有这个“问题”。我用 pygtk(带有一个文本字段)创建窗口,然后我的脚本执行数据库查询并准备数据以存储到 txt 文件中。一切都很好,但我只面临一件事 - 这个功能运行大约。2-4 分钟,在此期间我的程序窗口没有“响应”,所以看起来程序窗口冻结(但脚本正在运行并且窗口在完成后再次“活动”)。
我该如何对待这种行为?我想让我的窗口一直响应。例如:有一个文本字段“工作...”。
可能重复:
请简单的 pygtk 和线程示例
我的 python 脚本有这个“问题”。我用 pygtk(带有一个文本字段)创建窗口,然后我的脚本执行数据库查询并准备数据以存储到 txt 文件中。一切都很好,但我只面临一件事 - 这个功能运行大约。2-4 分钟,在此期间我的程序窗口没有“响应”,所以看起来程序窗口冻结(但脚本正在运行并且窗口在完成后再次“活动”)。
我该如何对待这种行为?我想让我的窗口一直响应。例如:有一个文本字段“工作...”。
您需要在应用程序中使用线程。每当您有一个长时间运行的进程时,您都需要将该工作放入一个单独的线程中并将进度更新发送到主线程。在您在这里找到一个工作示例之前,我已经回答了一个类似的问题。下面提供了一个较短的虚拟示例。
例子
import gtk, gobject, urllib, time, threading
def run():
for i in range(50):
gobject.idle_add(button.set_label, '%s/50 complete' % i)
time.sleep(0.1)
def clicked(button):
threading.Thread(target=run).start()
gtk.gdk.threads_init()
win = gtk.Window()
button = gtk.Button(label="Start")
button.connect('clicked', clicked)
win.add(button)
win.show_all()
gtk.main()