Этот код:
t = threading.Thread(target=display_msg())
функционально идентичен этому коду:
result = display_msg()
t = threading.Thread(result)
И этот код:
root.after(1, t.start())
функционально идентичен этому коду :
result = t.start()
root.after(1, result)
И в threading.Thread
, и в after
значения, данные функциям, должны быть ссылками на функцию, а не результатом function (если только результат сам по себе не является ссылкой на функцию).
t = threading.Thread(target=display_msg)
...
root.after(1, t.start)
Независимо от этого, ответ на «почему поток запускается только один раз?» заключается в том, что именно так поступают потоки. Потоки работают до тех пор, пока они не будут сделаны. Если вам нужен код для запуска в al oop, вам нужно написать l oop самостоятельно.