Как я могу изменить время планирования во время выполнения

#python #kivy #kivymd

#python #kivy #kivymd

Вопрос:

Я пытаюсь отобразить всплывающее окно в указанное пользователем время? Всплывающее окно отображается только в предварительно заданное время, поэтому я попробовал это. Теперь я получаю сообщение об ошибке: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

 class MainApp(MDApp):
    hour = NumericProperty(None, allowenone=True)
    minute = NumericProperty(None, allowenone=True)

    def build(self):
        # calling the service
        if platform == "android":
            from android import AndroidService
            service = AndroidService("my pong service", "running")
            service.start("service started")
            self.service = service

        schedule.every().day.at(f'{int(self.hour)}:{int(self.minute)}').do(self.mantraPop_message)
        #schedule.every().day.at(str(0)   str(self.hour)   ":"   str(self.minute)).do(self.show_notification)
        Clock.schedule_interval(lambda dt: schedule.run_pending(), 1)
        return MainScreen()

    def show_timepicker(self):
        picker = MDTimePicker()
        picker.bind(time=self.got_time)
        picker.open()

    def got_time(self, picker_widget, time):
        self.hour = time.hour
        self.minute = time.minute
        print(f'{int(self.hour)}:{int(self.minute)}')
  

Ответ №1:

schedule.every().day.at(f'{int(self.hour)}:{int(self.minute)}').do(self.mantraPop_message) должно быть помещено в def got_time(): , чтобы оно вызывало schedule каждый раз, когда установлено время. self.hour теперь также может быть пустым. Раньше происходило то, что при запуске приложения начинается планирование, которое не может быть обновлено, поэтому теперь планирование начинается только тогда, когда время было установлено пользователем.