Python Tkinter Tk root.after延迟

时间:2014-11-23 04:59:05

标签: python python-3.x time tkinter tk

我正在尝试使用tkinter做一个国际象棋时钟,为此我正在使用tkinter类Tk中的root.after方法。当程序启动时,它运行得很好,但一段时间后,时钟开始变慢和慢,但如果我开始摇动我的鼠标,时钟开始再次快速运行。对于时钟,时间精度至关重要,因此我无法以现在正在运行的方式运行程序。我该如何解决这个问题?

def RunClock(self):
        """
        Method that runs and change the clock info
        """
        #t0 = time.time()

        if self.playing:
            #Time remaining in milliseconds
            clock = self.clock


            minutes = clock//60000
            clock %= 60000

            sec = clock//1000
            clock %= 1000

            mil = clock//10

            #If the turn is of player 1
            if self.turn == 1:
                self.WriteClock(self.canvas1, self.play1, "%.2i:%.2i:%.2i"%(minutes, sec, mil))
            else:
                self.WriteClock(self.canvas2, self.play2, "%.2i:%.2i:%.2i"%(minutes, sec, mil))

            #tf = time.time()

            #deltat = (tf - t0)

            #s = 1 - deltat

            self.rel -= 1

            #if s > 0:
            #    time.sleep(s/1000)
            #else:
            #    self.rel += s*1000

            self.root.after(1, self.RunClock)

注意:运行该函数的时间非常短(您可以使用注释的tf和t0变量计算它),所以我甚至没有在时间间隔内考虑它

1 个答案:

答案 0 :(得分:1)

正如Brian所指出的,减少时间间隔可能是解决问题的最简单方法。或者,您可以尝试在它自己的线程上单独运行您的计时器并让它以异步方式运行并发送线程事件,如下所述:

Python threading.timer - repeat function every 'n' seconds