python脚本需要很长时间,窗口似乎冻结

时间:2012-11-28 13:49:57

标签: python pygtk

  

可能重复:
  Simple pygtk and threads example please

我的python脚本有这个“问题”。 我使用pygtk创建窗口(带有一个文本字段)然后我的脚本执行数据库查询并准备存储到txt文件中的数据。一切都很好,但我只有一件事 - 这个功能大约运行。 2-4分钟,在此期间我的程序窗口没有“响应”,所以它看起来像程序窗口冻结(但脚本正在运行,窗口在完成后再次“活动”)。

我怎么能对待这种行为?我想让我的窗口响应所有时间。例如:让文本字段“正在工作......”。

1 个答案:

答案 0 :(得分:1)

您需要在应用程序中使用线程。每当您有一个长时间运行的进程时,您需要将该工作放入一个单独的线程并将进度更新发送到主线程。在找到合适的example here之前,我已经回答了类似的问题。下面提供了一个较短的虚拟实例。

示例

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()