我正在嘗試使用 tkinter gui 制作一個簡單的 python 程式,該程式可以接受用戶輸入并將其添加到 JSON 檔案中。然后會有另一個輸入,用戶可以在其中輸入名稱并查找使用該名稱輸入的資料。到目前為止,我能夠將資訊寫入 JSON 檔案。鍵自動是名稱后跟資料型別。這樣,當用戶輸入名稱時,我的程式可以將資料型別添加到名稱的末尾并擁有所需資料的密鑰。此系統僅在 JSON 檔案中有一個物件時才有效。當我添加 2 我得到以下錯誤
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\liamm\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
File "c:\Users\liam\Desktop\Coding\json test\datagui.py", line 17, in find
Age = entry[Agevar]
KeyError: 'Steve_Age'
我不確定為什么當它說有錯誤的鍵是 JSON 檔案中的有效鍵時,我會收到一個 tkinter 錯誤和一個鍵錯誤。
這是包含一些測驗資料的 JSON 檔案,但將創建更多資料。
[
{
"Bob_NAME": "Bob",
"Bob_Age": "40",
"Bob_Weight": "200"
},
{
"Steve_NAME": "Steve",
"Steve_Age": "30",
"Steve_Weight": "150"
}
]
這是我的python程式
from tkinter import *
from tkinter import ttk
import json
from tokenize import Name
from setuptools import Command
filename = "test.json"
def find():
with open (filename, "r") as f:
finder = json.load(f)
#Adding the name and _Age to find the key for the right information
Agevar = E4.get() "_Age"
for entry in finder:
Age = entry[Agevar]
print(f"Age: {Age}")
def add_data():
Namevar = E1.get() "_NAME"
Agevar = E1.get() "_Age"
Weightvar = E1.get() "_Weight"
item_data = {}
with open (filename, "r") as f:
temp = json.load(f)
item_data[Namevar] = E1.get()
item_data[Agevar] = E2.get()
item_data[Weightvar] = E3.get()
temp.append(item_data)
with open (filename, "w") as f:
json.dump(temp, f, indent=4)
print(Namevar)
print(Agevar)
print(Weightvar)
top = Tk()
top.geometry("500x300")
L1 = Label(top, text="Enter information")
L1.grid(row=1, column=1)
L1 = Label(top, text="Name:")
L1.grid(row=2, column=1)
L1 = Label(top, text="Age:")
L1.grid(row=3, column=1)
L1 = Label(top, text="Weight:")
L1.grid(row=4, column=1)
L1 = Label(top, text="Find: ")
L1.grid(row=3, column=3)
E1 = Entry(top, bd =5)
E1.grid(row=2, column= 2)
E2 = Entry(top, bd =5)
E2.grid(row=3, column= 2)
E3 = Entry(top, bd =5)
E3.grid(row=4, column= 2)
E4 = Entry(top, bd= 5)
E4.grid(row= 3, column= 4)
btn = Button(top, command = add_data, text = "Add", height = 2, width = 5)
btn.grid(row=5, column=2)
btn2 = Button(top, command = find, text = "Find", height = 2, width = 5)
btn2.grid(row=5, column=4)
top.mainloop()
uj5u.com熱心網友回復:
問題源于以下行:
for entry in finder:
原因是因為finder是字典串列。該串列中的第一項參考Bob. 您正在運行的代碼似乎正在尋找Steve,這是該串列中的第二項。您需要放置一些邏輯,Agevar = E4.get() "_Age"因為這可以回傳任何個人姓名。
您可以將代碼更改為以下內容:
for entry in finder:
Age = entry.get(Agevar)
if Age:
print(f"Age: {Age}")
但是,這不會處理輸入根本不存在的名稱的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/428845.html
