Поскольку в очередь потенциально записывается много потоков (по одному при каждом нажатии кнопки), немного неясно, когда текст должен быть удален, а новый текст должен быть вставлен.Например, если текст только что написан и новый текст поступает, новый текст должен быть записан немедленно или он должен быть добавлен в очередь для последующего отображения, если позволяет время?
Вы можете настроить обработчик статуса для обработкиудалять команды, а также вставлять команды.Эта версия обработчика запускает поток после каждой вставки, которая отправляет обратно команду удаления.Если идентификатор команды удаления совпадает с идентификатором отображаемого в данный момент текста, обработчик состояния стирает отображение:
def status(t, current_id, queue):
try:
data = queue.get(block = False)
# Insert text for ID command:
if type(data) == tuple:
(id, str) = data
t.delete(0, END)
t.insert(0, str)
current_id = id
# Thread that sends a delete command
# after a fixed delay.
make_delete_thread(id, queue)
# Delete text for ID command:
elif data == current_id:
t.delete(0, END)
except Queue.Empty:
pass
t.after(10, lambda: status(t, current_id, queue))
def make_delete_thread(id, queue):
thread.start_new_thread(delete_thread, (id, queue))
def delete_thread(id, queue):
time.sleep(1)
queue.put(id)