在自动重复时检测tkinter事件处理程序中的键盘溢出以避免滞后

时间:2016-10-01 08:53:37

标签: python events tkinter

在我的应用程序中,我想让用户通过按住箭头键滚动图像。毫不奇怪,对于较大的图像,电脑无法跟上,并建立一个潜在的大缓冲区,在密钥发布后继续进行处理。

这些都不是意料之外的,我的正常答案只是检查事件中的时间戳与当前时间,并丢弃任何超过(例如).2秒的事件。这样积压就永远不会太大。

但是tkinter使用了一些事件的随机时基,因此与time.time()进行比较是没有意义的,而且我找不到能够掌握tkinter自己的时钟的函数。我确信它在那里,它只是大部分pythonised tkinter文档有点naff,搜索时间或时钟也没有帮助。

def plotprev(self,p):
    if time.time() - p.time > .2:
        return

可悲的是,这个测试总是返回true,在哪里可以找到tkinter的伪时钟? 相比之下,任何其他方法都会很复杂。

1 个答案:

答案 0 :(得分:0)

好吧,它也不是很好,但它不是太繁琐,而且看起来效果很好:(也有一点监控)

    def checklag(self,p):
    if self.lasteventtime is None: #assume first event arrives with no significant delay
        self.lasteventtime = p.time
        self.lasteventrealtime = time.time()
        self.lagok=0
        self.lagfail=0
        return True
    ptdiff = (p.time-self.lasteventtime) / 1000
    rtdiff = time.time() - self.lasteventrealtime
    lag = rtdiff-ptdiff
    if lag < .3:
        self.lagok += 1
        if self.lagok %20 == 0:
            print("lagy? OK: %d, fail: %d" %(self.lagok, self.lagfail))
        return True
    else:
        self.lagfail += 1
        return False