def job():
messagebox.showinfo(title="Проверка", message="Ура! Работает!")
def schedule_work():
schedule.every(3).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
def start():
if app_btn['text'] == 'Начать':
thr1 = threading.Thread(target=schedule_work)
thr1.start()
app_btn['text'] = 'Остановить'
else:
thr1.join()
app_btn['text'] = 'Начать'
Он никак не сигнализирует указанному потоку, что пора завершаться, это твоя задача.