【发布时间】:2019-05-19 00:16:12
【问题描述】:
我有一个按钮列表,当按下这些按钮时,将值 1 添加到 score。该按钮被视为screen_two.ids.streak_zone 的子级。当我按下按钮时,它会更新 json 文件中所有按钮的 score 值。如何让它只更新一个按钮?
这是我的代码:
def add_score(self, obj):
for child in reversed(self.root.screen_two.ids.streak_zone.children):
name = child.text
with open("streak.json", "r") as file:
read = json.load(file)
for key in read.keys():
if key == name:
with open("streak.json", "r+") as f:
data = json.load(f)
data[key]['score']+=1
f.seek(0)
json.dump(data, f, indent=4)
f.truncate()
json 文件:
{
"one": {
"action": "one",
"delay": 1558824388.0762293,
"seconds": 60,
"score": 5,
"delta": 1558224388.0762293
},
"two": {
"action": "two",
"delay": 1558824393.8408294,
"seconds": 60,
"score": 5,
"delta": 1558224393.8408294
}
}
【问题讨论】:
-
您运行
for child循环,以便为所有按钮执行此操作。也许在某些地方添加print()以查看您在变量中的内容以及执行了哪部分代码。 -
我不知道如果你已经在变量
read中加载了相同的数据,为什么还要第二次加载它。代替for key循环,您可以检查onluif name in read.keys():,然后更改read[name]["score"]中的值,然后打开文件再次写入所有数据。 -
我不确定,但你应该检查
obj- 也许你已经点击了obj中的按钮并且你不必使用for child循环来为所有孩子运行你的代码。 -
感谢删除子循环有效!