2016-10-01 30 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