gpt4 book ai didi

python - 程序空闲一段给定时间后调用函数

转载 作者:太空宇宙 更新时间:2023-11-03 19:11:37 26 4
gpt4 key购买 nike

我的基于 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()

最佳答案

在以下示例中,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()

关于python - 程序空闲一段给定时间后调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12781979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com