2010-04-09 70 views
0

我制作了一个小程序,它有两个按钮,每个都有特定的功能。这是代码的简化版本。执行def函数时GUI会冻结。使用线程?

事情是否正常工作除了按钮冻结并停留在点击位置和整个GUI冻结,直到命令完成。 据我所知在这种情况下最好使用线程,但我不知道如何在这个例子中实现它。

我对gui使用glade和pygtk。

def do1: 
     t = 2 
     #do something 
     time.sleep(t) 
     #do something 
     time.sleep(t) 
def do2: 
     t = 3 
     #do something 
     time.sleep(t) 
     #do something 
     time.sleep(t) 

class we: 
     wTree = None 
     def __init__(self):     
       self.wTree = gtk.glade.XML("ui.glade") 

       dic = { 
         "on_buttonSone" : self.sone, 
         "on_buttonStwo" : self.stwo, 
       } 
       self.wTree.signal_autoconnect(dic)    
       gtk.main() 

     def sone(self, widget): 
       i = 0 
       while i < 3: 
         t = 1 
         #do something 
         i += 1 
         time.sleep(t)   
       self.wTree.get_widget("entryResult").set_text("Done.") 
     def stwo(self, widget): 
       start = time.clock() 
       array = ['A','B'] 
       adict = {'A':do1,'B':do2} 
       for f in array: 
         adict[f]() 
       end = time.clock() 
       elapsed = end - start 
       gg = round(elapsed,2)    
       self.wTree.get_widget("entryResult").set_text(str(gg))    

go=we() 

回答