Выполнение функции в фоновом режиме в tkinter - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь запустить в фоновом режиме функцию под названием будильник, пока работает функция под названием часы. это моя функция будильника. Поскольку код внутри сложен, я привожу только пример.

def Alarm():
     while True:
            current_time = dt.datetime.now().time()
            if timetable[0] == current_time:
                  print("Its time")
                  break

clock()
Alarm()
root.mainloop()

Функция не выполняется в фоновом режиме, но сначала выполняется, а затем запускается GUI.

Ответы [ 2 ]

3 голосов
/ 10 июля 2020

Вы можете использовать after() для замены while l oop:

def alarm():
    current_time = dt.datetime.now().time()
    if current_time >= timetable[0]:
        print("It's time")
    else:
        # check again 1 second later
        root.after(1000, alarm)

clock()
alarm()
root.mainloop()
1 голос
/ 10 июля 2020

Вам потребуется threading:

import threading

# Your Alarm definition

alarm_thread = threading.Thread(target=Alarm)
main_thread = threading.Thread(target=root.mainloop)

alarm_thread.start()
main_thread.start()

Теперь функции будут выполняться одновременно, но имейте в виду, что будет сложно управлять взаимодействиями между ними. Я не знаю, как определяется функция clock и как вы хотите, чтобы она выполнялась, но вы можете легко изменить код, чтобы эта функция работала одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...