tkinter - 我在使用 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()]
它给出关键错误时。
解决方案
当你输入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
输入不存在时的验证消息
推荐阅读
- java - How to fix a "money sorter" java program
- ios - 在组合中将给定的发布者失败类型设置为从不
- oop - 如何获取列表中自定义对象元素的索引
使用对象属性? - dbpedia - 在 DBpedia 中检索资源的第一个表示的日期
- python - 显示 OpenCV+Gstreamer 视频。如何管理窗口和 GUI 元素?
- javascript - 我想在每次点击时增加 div 的宽度
- c# - 最后一个 StackLayout 项目丢失或被剪切
- c# - “char”不包含“MinValue”的定义
- c - int variable++ 不会增加超过 1 或将重置为 0
- json - 使用 JQ 将同一文件中的多个 JSON 数组合并为一个 JSON 数组