2012-10-08 77 views
0

我的基於Tkinter的程序需要定期執行一些「重」維護功能。 由於它是一個連續運行的程序,我只想在給定的空閒時間之後啓動這些功能。程序空閒一段時間後調用函數

你如何在Tkinter中做到這一點?我在http://etutorials.org/Programming/Python+tutorial/Part+III+Python+Library+and+Extension+Modules/Chapter+16.+Tkinter+GUIs/16.9+Tkinter+Events/中發現了關於after_idle的大概情況,但事件循環空閒時,這隻會被稱爲。我需要它來運行我的功能,例如,在空閒時間10分鐘後。

~~~

Mr.Steak給了我所需要的答案 - 我只是修改了它稍微如下能夠在不同的時間間隔,執行不同的任務使用空閒時間變量:

import time 
from Tkinter import * 

root = Tk() 


def resetidle(*ignore): 
    global idletime 
    for k in idletime: k['tlast']=None 

def tick(*ignore): 
    global idletime 
    t=time.time() # the time in seconds since the epoch as a floating point number 
    for k in idletime: 
     if not k['tlast']: 
      k['tlast'] = t 
     else: 
      if t-k['tlast']>k['tmax']: 
       k['proc']() 
       k['tlast'] = None 
    root.after(5000, tick) # reset the checks every 5'' 

idletime=[{'tlast':None,'tmax':60,'proc':test1},    # every 1' 
     {'tlast':None,'tmax':3600,'proc':test2}] # every 1h 
root.after(5000, tick) 
root.bind('<Key>', reset) 
root.bind('<Button-1>', reset) 
root.mainloop() 

回答

1

在以下示例中,每秒調用tick函數。 5秒鐘後,將打印一條消息,除非按下鍵或鼠標按鈕1。

import time 
from Tkinter import * 

root = Tk() 
running = None 

def reset(*ignore): 
    global running 
    running = None 

def tick(*ignore): 
    global running 
    if not running: 
     running = time.time() 
    elif time.time() - running > 5: 
     print 'I waited 5 seconds...' 
     running = None 
    root.after(1000, tick) 

root.after(1000, tick)  
root.bind('<Key>', reset) 
root.bind('<Button-1>', reset) 
root.mainloop() 
相關問題