У меня есть кнопки, которые связаны с ключами в моем файле JSON.С помощью модуля часов kivy я проверяю значение, связанное с кнопкой, и меняю ее цвет.Когда кнопка становится красной, я хочу, чтобы ее значение score
стало 0 и было сохранено в файле json.Когда в файле json сохранено несколько кнопок, счет не обнуляется до тех пор, пока я не нажму одну из кнопок, и когда я нажму кнопку, все значения, кроме первой кнопки, повернутой в 0, это не то, что я хочу.
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):
name = child.text
with open("streak.json", "r") as read_file:
data = json.load(read_file)
for key in data.keys():
if key == name:
delay = data.get(key, {}).get('delay') # get value of nested key 'delay'
self.honey = data[key]['delta']
float(self.honey)
if delay > time.time() < self.honey: # early (yellow)
child.background_normal = ''
child.background_color = [1, 1, 0, 1]
child.unbind(on_press=self.add_score)
child.bind(on_press=self.early_click)
elif delay > time.time() > self.honey: # on time (green)
child.background_normal = ''
child.background_color = [0, 1, 0, 1]
child.unbind(on_press=self.early_click)
child.bind(on_press=self.add_score)
elif delay < time.time() > self.honey: # late (red)
child.background_normal = ''
child.background_color = [1, 0, 0, 1]
child.unbind(on_press=self.add_score)
child.unbind(on_press=self.early_click)
with open("streak.json", "r+") as f:
files = json.load(f)
files[child.text]['score'] = 0
f.seek(0)
json.dump(files, f, indent=4)
f.truncate()
json file:
{
"One": {
"action": "One",
"delay": 1558740875.58999,
"seconds": 60,
"score": 3,
"delta": 1558740815.58999,
"grace_sec": 120
},
"Two": {
"action": "Two",
"delay": 1558740752.0085213,
"seconds": 60,
"score": 0,
"delta": 1558740692.0085213,
"grace_sec": 120
},
"Three": {
"action": "Three",
"delay": 1558746820.4364505,
"seconds": 60,
"score": 0,
"delta": 1558740820.4364505,
"grace_sec": 6060
}
}
Я хочу, чтобы только красная кнопка меняла score
на 0, но и Two
и Three
меняются, даже если только Two
был красным.Кроме того, оценка меняется только когда я нажимаю зеленую кнопку, в данном случае это было One
.Это не то, что я хочу.Я хочу, чтобы счет обновлялся самостоятельно с помощью модуля Clock.