2016-10-01 32 views
-1

在我的应用程序中,我希望允许用户按住箭头键滚动图像。毫不奇怪,对于较大的图像,电脑无法跟上,并建立一个潜在的大缓冲区,在密钥释放后进行处理。在自动重复时检测tkinter事件处理程序中的键盘溢出以避免延迟

这一切都没有预料到,我的正常答案只是检查事件中的时间戳与当前时间,并丢弃超过(比如说)0.2秒的任何事件。这样积压不会太大。

但tkinter使用一些随机时间事件,以便与time.time()相比没有意义,并且我找不到一个函数来获取tkinter自己的时钟。我确定它在那里,它只是大部分python化的tkinter文档有点不起眼,寻找时间或时钟也无济于事。

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

可悲的是,这个测试总是返回true,tkinter的伪时钟在哪里被发现? 任何其他方法比较复杂。

+1

Tkinter的有'root.after(time_in_miliseconds,函数名)'你可以用它来建立时钟。顺便说一句:你的函数返回'None'不是'True',因为'return'意思是'return None'。你总是可以打印'time.time() - p.time'来检查你得到的值。 – furas

+0

啊是的,抱歉 - 粘贴错误 – pootle

回答

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