0

我正在 python 中制作一个 gui,它使用串行端口发送命令。在我的旧脚本中,没有 gui,我在写命令之间使用了 time.sleep(x)(对于命令成功是必要的)。现在,当我使用 gui envrimont 时,我不能使用 sleep,所以我使用 after。

它工作得很好,但是:我正在为我的 gui 使用 Tkinter。当我按下按钮 start 时, OnButtonClickSTART 在 x 时间后启动另一个功能。使用 self.after 我在每个进程之间等待 x 秒。它可以工作,但是当我给函数赋值时,它不会等待给定的时间。

   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。

谢谢

4

1 回答 1

0

使用self.waitmuchmore(value)将立即调用该waitmuchmore方法。您需要使用lambda表达式functools.partial返回将调用waitmuchmorewith的新函数,并将其value传递给self.after

lambda: self.waitmuchmore(value)

或者

import functools
functools.partial(self.waitmuchmore, value)
于 2013-08-04T17:17:14.610 回答