我试着用tkinter做一个国际象棋时钟,为此我用根。后方法来自tkinter的Tk类。当程序启动时,它运行得很好,但过了一段时间,时钟开始变得越来越慢,但如果我开始晃动鼠标,时钟又开始快速运行。对于一个时钟来说,时间的精确性是至关重要的,所以我负担不起以现在的方式运行程序。我怎样才能解决这个问题?在
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变量计算它),所以我甚至没有在时间间隔内考虑它
正如布赖恩指出的,缩短时间间隔可能是解决问题的最简单方法。不过,您也可以尝试在计时器自己的线程上单独运行计时器,并让它异步运行,然后将线程事件发送给它,如下所述:
Python threading.timer - repeat function every 'n' seconds
相关问题 更多 >
编程相关推荐