【问题标题】:call a function after program has been idle for a given time在程序空闲给定时间后调用函数
【发布时间】:2012-09-28 17:15:01
【问题描述】:

我的基于 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 给出了我需要的答案 - 我只是稍微修改了一下,以便能够使用 idletime 变量以不同的时间间隔执行不同的任务:

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()

【问题讨论】:

    标签: python events tkinter


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2011-03-19
      相关资源
      最近更新 更多