Я пытаюсь запустить функцию будильника в tkinter, но она не работает должным образом - PullRequest
0 голосов
/ 10 июля 2020

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

t1 = dt.time(hour = 13, minute= 24)
t2 = dt.time(hour= 13, minute= 4)
timetable = [t1, t2]
root = Tk() 

def Alarm():
      current_time = now_time.strftime("%H:%M:%S")
      print(current_time)
      print(timetable[0])
      while True:
            if timetable[0] <= dt.datetime.now().time():
                print("Its time")
            break
Alarm()
root.mainloop()

операторы печати предназначены только для тестирования. Лог c, который я использую в будильнике, также не работает должным образом, поскольку он сообщает: «Его время» даже после того, как время прошло. Я пробовал следующие методы раньше.

метод 1:

for i in reversed(timetable):
    i_time = i
    #print (i_time)
    #print(now_time.strftime("%H:%M"))
    while True:
        if dt.datetime.now().time() < i_time:
        #if i_time <= dt.datetime.now().time():
            print("Its Time")
            break

метод 2:

for i in timetable:
    current_time = dt.datetime.now().time()
    alarm_time = i
    while True:
        if current_time < alarm_time:
            if current_time <= alarm_time:
                print("its time", alarm_time)

Использование для l oop было моей первой целью, но для l oop не выполняется должным образом. Он получает только 1-й элемент, а не go ко второму элементу, даже если первый элемент прошел, поэтому я решил go с помощью оператора if, elif, else

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Вы можете использовать метод after для запуска функции по истечении определенного времени. Вам следует использовать его, а не создавать al oop.

. Вам просто нужно преобразовать время будильника в миллисекунды, а затем использовать это для вызова будильника в заданное время. Например, чтобы включить будильник через час, вы должны сделать это:

def ring_alarm():
    print("Its time")
delay = 60 * 60 * 1000  # 60 min/hour, 60 secs/min, 1000ms/sec
root.after(delay, ring_alarm)
0 голосов
/ 10 июля 2020

Я собираюсь с ответом if..else для выполнения сигнала тревоги как

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

Я ломал Пока l oop не в том месте, а также опечатка с моей стороны.

...