首页 > 解决方案 > 我在使用 tkinter .get() 函数调用键的值时遇到问题

问题描述

Tkinter 回调 100 Traceback 中的异常(最近一次调用最后一次):
文件“D:\anaconda\lib\tkinter__init__.py”,第 1702 行,调用 返回 self.func(*args) 文件“C:/Users/hp/PycharmProject /Financial Project/JournalEntries.py",第 29 行,在日志中 self.AccountCode = AccCode[Account_Title.get()] KeyError: '100'

这是我的字典:

 AccCode = {100 : 'Cash',101 : 'Equipments', 102 : 'Supplies' , 103 : 'AccRec' , 104 : 'PreInsurance',
                   200 : 'AccPayable', 201 : 'NotesPay', 202 : 'InterestPayable', 203 : 'AccDepreciation' , 204 : 'Salaries and wages payable',
                   300 : 'Owner Capital', 301 : 'Owner Drawing',
                   400 : 'Service Revenue' , 401 : 'Rent Revenue',
                   500 : 'Salaries and wages Expense' , 501 : 'Utilities Expense' , 502 : 'Rent Expense' , 503 : "Insurance Expense" , 504 : 'Depreciation Expense' , 505 : 'Supplies expense' , 506 : ' Interest Expense' }

虽然,当我打电话时print(Account_Title.get())它给了我 100,因为我在 tkinter 条目中输入了 100。但是当self.AccountCode = AccCode[Account_Title.get()] 它给出关键错误时。

标签: tkinter

解决方案


当你输入key前。100,您希望value在 tkinter 窗口中看到现金。

使用小部件textvariable中的选项Entry,您可以调用get()textvariable获取key您在输入字段中输入的内容。

由于字典中的所有键都是整数,因此我过去IntVar()只接受来自Entry. 要接受来自条目小部件的字符串值,您可以使用StringVar().

使用sqlite3,如果key字典中存在 ,它会将acc_code和都acc_value插入到acc_info数据库中。

代码:

AccCode = {100 : 'Cash',101 : 'Equipments', 102 : 'Supplies' , 103 : 'AccRec' , 104 : 'PreInsurance', 200 : 'AccPayable', 201 : 'NotesPay', 202 : 'InterestPayable', 203 : 'AccDepreciation' , 204 : 'Salaries and wages payable', 300 : 'Owner Capital', 301 : 'Owner Drawing', 400 : 'Service Revenue' , 401 : 'Rent Revenue', 500 : 'Salaries and wages Expense' , 501 : 'Utilities Expense' , 502 : 'Rent Expense' , 503 : "Insurance Expense" , 504 : 'Depreciation Expense' , 505 : 'Supplies expense' , 506 : ' Interest Expense' }

window = tk.Tk()

key = tk.IntVar()
key_entry = tk.Entry(window, width=20, textvariable=key)
key_entry.grid(row=0, column=0, padx=10, pady=4)

value_label = tk.Label(window, width=20)
value_label.grid(row=1, column=0, padx=10, pady=4)

# create the database and table
con = sqlite3.connect('acc_info.db')
cursor = con.cursor()
create_table_query = "CREATE TABLE IF NOT EXISTS acc_table(acc_code NUMERIC, acc_value TEXT)"
cursor.execute(create_table_query)
con.commit()
con.close()

def get_value():
    # get the value entered in the entry field
    entered_key = key.get()

    # if entered key exists in the dictionary
    if entered_key in AccCode.keys():
        con = sqlite3.connect('acc_info.db')
        cursor = con.cursor()
        insert_query = "INSERT INTO acc_table(acc_code, acc_value) VALUES(?,?)"
        entered_data = (AccCode[entered_key], entered_key)
        cursor.execute(insert_query, entered_data)
        con.commit()
        con.close()
        value_label.config(text=AccCode[entered_key]+' - Value Inserted')
    else:
        # if key not exists, then print message
        value_label.config(text="Key doesn't exist")

btn = tk.Button(window, text='Insert value to db', command=get_value)
btn.grid(row=2, column=0, padx=20, pady=4)

window.mainloop()

图形用户界面:

输入key并按下Insert value to db

图形界面

key输入不存在时的验证消息

带有键和值的 GUI


推荐阅读