所以你的代码有两个基本问题。在正如@windfinder所指出的,如果你想让线程更新你的gui,你需要运行gobject.threads_init()使线程与gtk应用程序正常工作。实际上,如果不运行gobject.threads_init()
由于在将控制权返回主循环之前,请求线程加入,所以在所有线程都完成finfinish之前,按钮的回调不会变为finfinish。您可以通过gobject添加超时来解决此问题。
我对您的代码做了一些更改(我还要求线程休眠,以便在线程仍在运行时看到gui已更新)。在#!/usr/bin/env python
import gobject
import time # This is just used for slowing down the threads
import os
import threading
import gtk
class FileBrowser:
def __init__(self):
self.window = gtk.Window()
self.window.show_all()
self.window.connect("destroy", self._destroy)
box = gtk.VBox()
box.show()
self.scrolled_w = gtk.ScrolledWindow()
self.scrolled_w.show()
self.window.add(box)
self.status = gtk.Label("...") # I added a status label to see when scan is done