2013-08-04 34 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)