self.after在传递价值时不等待

时间:2013-08-04 16:59:56

标签: python timer self pyserial function

我在python中使用串口发送命令。在我的旧脚本中,没有gui,我在write命令之间使用了time.sleep(x)(命令成功是必要的)。现在,当我使用gui envrimont时,我无法使用睡眠,因此我会使用它。

效果很好,但是: 我正在使用Tkinter作为我的gui。当我按下按钮开始时,OnButtonClickSTART在x时间后启动另一个功能。随着self.after我等待每个进程之间的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

1 个答案:

答案 0 :(得分:0)

使用self.waitmuchmore(value)会立即调用waitmuchmore方法。您需要使用lambda expressionfunctools.partial来返回将waitmuchmore调用value的新功能,并将其传递给self.after

lambda: self.waitmuchmore(value)

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