#python #python-3.x #user-interface #tkinter
#python #python-3.x #пользовательский интерфейс #tkinter
Вопрос:
Я хочу эмулировать функцию тайм-аута Windows, которая запускается только после того, как в Tkinter нет действий с клавиатурой и мышью. Допустим, если клавиатуры не нажаты, окно будет уничтожено через 10 секунд, но при каждом нажатии клавиш таймер будет задерживаться еще на 5 секунд.
Пример:
app = Tk()
time = 10000
shutdown = app.destroy()
app.after(time, shutdown)
if button == pressed:
time 5000
Однако мне сказали.после того, как в Tkinter не удается этого сделать, и я действительно пытался, время не изменится с 10000, есть какие-либо предложения?
Ответ №1:
Вы не можете просто обновить time
переменную, чтобы изменить уже запланированную after
задачу. Вам нужно отменить (используя after_cancel()
идентификатор задачи, возвращаемый after()
) запланированную задачу и перенести новую after
задачу.
Однако это проще сделать, используя концепцию обратного отсчета:
import tkinter as tk
root = tk.Tk()
timeout = 10000
delay = 100 # check count down every 100ms (adjust it to what you like)
def countdown():
global timeout
if timeout:
print(timeout)
root.after(delay, countdown)
timeout -= delay
else:
print('timed out')
root.destroy()
def extend_timeout(event):
global timeout
timeout = 5000
root.bind('<Key>', extend_timeout) # extend timeout by pressing any key
countdown() # start the count down
root.mainloop()