samedi 4 mai 2019

Why does my if and elif statements only work for one button at a time?

I have my program display a list of buttons stored in a json file. I have each button's stored time, honey, compared to the current time, time.time() and the delay that the user inputs.

For some reason the conditional only works when there is one button. Once I add an additional button the program turns the first button green to indicate its early and the new button turns yellow to indicate that it is early. Once the new button turns red the first button turns red as well.

I have timed the program and the program runs at the correct time. Why am I having this problem and how would I fix it? Code:

class MainApp(App):
    def build(self): # build() returns an instance
        self.store = JsonStore("streak.json") # file that stores the streaks:
        Clock.schedule_interval(self.check_streak, 1/30.)

        return presentation

    def check_streak(self, dt):

        for child in reversed(self.root.screen_two.ids.streak_zone.children):
            honey = float(child.id)

            with open("streak.json", "r") as read_file:
                data = json.load(read_file)

            for value in data.values():
                if value['delay'] is not None:
                    delay = int(value['delay'])

            # fix for later
            if delay > time.time() < honey: # early (yellow)
                child.background_normal = ''
                child.background_color = [1, 1, 0, 1]

            elif delay > time.time() > honey: # on time (green)
                child.background_normal = ''
                child.background_color = [0, 1, 0, 1]


            elif delay < time.time() > honey: # late (red)
                child.background_normal = ''
                child.background_color = [1, 0, 0, 1]


def display_btn(self):
        # display the names of the streaks in a list on PageTwo
        with open("streak.json", "r") as read_file:
            data = json.load(read_file)

        for value in data.values():
            if value['delta'] is not None:
                print(f"action={value['action']}, delta={value['delta']}, grace={value['delay']}")
                streak_button = StreakButton(id=str(value['delta']), text=value['action'],
                                            on_press=self.third_screen, size=(400,50),
                                            size_hint=(None,None))
                self.root.screen_two.ids.streak_zone.add_widget(streak_button)


total = ((int(self.streak.day) * 86400) + (int(self.streak.hour) * 3600) +
                    (int(self.streak.minute) * 60)) # convert into seconds

            self.current_time = time.time()
            self.count = self.current_time + total
            grace = (int(self.streak.delay) * 60) + self.count # aka delay

            parsed = True

            # delete later just used to test
            print("[seconds:", total,']' , "[action:", self.streak.action,']',
                 "[grace:", grace,']')

            # store streak attributes inside "streak.json"
            self.store.put(self.streak.action, action=self.streak.action,
                          delay=grace, seconds=total,
                          score=0, delta=self.count)

Aucun commentaire:

Enregistrer un commentaire