我正在尝试使用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变量计算它),所以我甚至没有在时间间隔内考虑它
答案 0 :(得分:1)
正如Brian所指出的,减少时间间隔可能是解决问题的最简单方法。或者,您可以尝试在它自己的线程上单独运行您的计时器并让它以异步方式运行并发送线程事件,如下所述: