Как эмулировать время ожидания экрана Windows в Tkinter?

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