2013-08-04 90 views
0

我正在python中使用串口發送命令的GUI。在我的舊腳本中,沒有gui,我在寫命令之間使用了time.sleep(x)(命令成功是必要的)。現在,當我使用gui envrimont時,我無法使用睡眠,所以我以後使用。self.after不等待傳遞值

它運行良好,但: 我使用Tkinter爲我的GUI。當我按下按鈕啓動時,OnButtonClickSTART在x時間後啓動另一個功能。隨着自我。我在每個過程之間等待x secondes。它可以工作,但是當我給這個函數賦值時,它不會等待給定的時間。

def OnButtonClickSTART(self): 
      print "START" 
      self.button1.configure(state='disabled') 
      self.after(1000, self.waitmore) 

    def waitmore(self): 
      value = 5 
      print value 
      self.after(10000,self.waitmuchmore(value)) 
    def waitmuchmore(self,value): 
      print value 
      self.after(10000,self.OnButtonClickSTOP) 
    def OnButtonClickSTOP(self): 
      print "STOP" 
      self.button1.configure(state='normal') 

這裏不是一個更好的方法來執行一系列的命令,並在它們之間有一定的時間。就像睡眠一樣,但可以使用1個功能,並且不會禁用gui。

THX

+0

看來你已經在給定的時間self.after具有恆定的價值。 – Reti43

回答

0

使用self.waitmuchmore(value)會立即撥打waitmuchmore方法。你需要使用一個lambda expressionfunctools.partial返回一個新的功能,將調用waitmuchmorevalue,並傳遞到self.after代替:

lambda: self.waitmuchmore(value) 

import functools 
functools.partial(self.waitmuchmore, value)