Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter Tk root.after Delay_Python_Python 3.x_Time_Tkinter_Tk - Fatal编程技术网

Python Tkinter Tk root.after Delay

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 "

我试图使用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变量来计算),所以我甚至没有考虑到时间间隔

< P>。布瑞恩指出减少时间间隔可能是解决问题的最简单的方法。不过,您也可以尝试在计时器自己的线程上单独运行计时器,并使其异步运行,然后向其发送线程事件,如下所述:


这里没有足够的代码来找出哪里出了问题。另一方面,不要这样做:
clock=self.clock
。这是一个你不想开始的习惯。你在哪个操作系统上?首先,没有理由每毫秒运行一次时钟代码。下棋的人真的能把自己的时间精确到千分之一秒吗?实际上没有必要使用少于一秒或半秒的时间。为了避免漂移,你可以。