【发布时间】:2015-01-21 00:56:34
【问题描述】:
我正在尝试使用 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变量计算),所以我什至没有考虑时间间隔
【问题讨论】:
-
这里没有足够的代码来找出问题所在。另一方面,不要这样做:
clock = self.clock。这是你不想养成的习惯。 -
你在哪个操作系统上?
-
一方面,没有理由每毫秒运行一次时钟代码。国际象棋选手真的会把自己的时间精确到千分之一秒吗?真的没有必要使用不到一秒或半秒。
-
为避免漂移,您可以lock the clock with a timer。
标签: python python-3.x time tkinter tk