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