加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python Tkinter Tk root.after延迟

发布时间:2020-12-20 13:45:53 所属栏目:Python 来源:网络整理
导读:我正在尝试使用tkinter做一个国际象棋时钟,为此我正在使用tkinter类Tk中的root.after方法.当程序启动时,它运行得很好,但一段时间后,时钟开始变慢和慢,但如果我开始摇动我的鼠标,时钟开始再次快速运行.对于时钟,时间精度至关重要,因此我无法以现在正在运行的
我正在尝试使用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,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变量计算它),所以我甚至没有在时间间隔内考虑它

解决方法

正如Brian指出的那样,减少时间间隔可能是解决问题的最简单方法.或者,您可以尝试在其自己的线程上单独运行您的计时器并让它以异步方式运行并发送线程事件,如下所述:

Python threading.timer – repeat function every ‘n’ seconds

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读