Python Tkinter Tk root.after Delay
我试图使用tkinter制作一个国际象棋时钟,为此我使用tkinter类Tk中的root.after方法。当程序启动时,它运行得非常好,但过了一段时间,时钟开始变得越来越慢,但如果我开始摇晃鼠标,时钟又开始快速运行。对于一个时钟来说,时间精度是至关重要的,所以我负担不起以现在的方式运行程序。我怎样才能解决这个问题Python Tkinter Tk root.after Delay,python,python-3.x,time,tkinter,tk,Python,Python 3.x,Time,Tkinter,Tk,我试图使用tkinter制作一个国际象棋时钟,为此我使用tkinter类Tk中的root.after方法。当程序启动时,它运行得非常好,但过了一段时间,时钟开始变得越来越慢,但如果我开始摇晃鼠标,时钟又开始快速运行。对于一个时钟来说,时间精度是至关重要的,所以我负担不起以现在的方式运行程序。我怎样才能解决这个问题 def RunClock(self): """ Method that runs and change the clock info "
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变量来计算),所以我甚至没有考虑到时间间隔< P>。布瑞恩指出减少时间间隔可能是解决问题的最简单的方法。不过,您也可以尝试在计时器自己的线程上单独运行计时器,并使其异步运行,然后向其发送线程事件,如下所述:
这里没有足够的代码来找出哪里出了问题。另一方面,不要这样做:
clock=self.clock
。这是一个你不想开始的习惯。你在哪个操作系统上?首先,没有理由每毫秒运行一次时钟代码。下棋的人真的能把自己的时间精确到千分之一秒吗?实际上没有必要使用少于一秒或半秒的时间。为了避免漂移,你可以。