用tkinter写一个能查询的账本
时间: 2023-10-05 12:11:25 浏览: 82
好的,下面是一个简单的例子,可以创建一个带有查询功能的账本:
```python
import tkinter as tk
import csv
root = tk.Tk()
root.title("账本")
# 读取csv文件并创建初始交易记录
transaction_list = []
with open("transactions.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
transaction_list.append(row)
# 定义函数
def add_transaction():
amount = float(amount_entry.get())
transaction_type = type_var.get()
transaction_list.append([transaction_type, amount])
update_display()
def update_display():
balance = 0
transaction_text.delete("1.0", tk.END)
for transaction in transaction_list:
if transaction[0] == "收入":
balance += transaction[1]
else:
balance -= transaction[1]
transaction_text.insert(tk.END, "{}: ¥{:.2f}\n".format(transaction[0], transaction[1]))
balance_label.config(text="余额:¥{:.2f}".format(balance))
def search_transaction():
keyword = search_entry.get().strip()
if keyword:
search_result = []
for transaction in transaction_list:
if keyword in transaction[0]:
search_result.append(transaction)
transaction_text.delete("1.0", tk.END)
for transaction in search_result:
transaction_text.insert(tk.END, "{}: ¥{:.2f}\n".format(transaction[0], transaction[1]))
else:
update_display()
def save_transaction():
with open("transactions.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(transaction_list)
# 创建组件
amount_label = tk.Label(root, text="金额:")
amount_entry = tk.Entry(root, width=10)
type_label = tk.Label(root, text="类型:")
type_var = tk.StringVar()
type_var.set("收入")
type_menu = tk.OptionMenu(root, type_var, "收入", "支出")
add_button = tk.Button(root, text="添加", command=add_transaction)
balance_label = tk.Label(root, text="余额:¥0.00")
search_label = tk.Label(root, text="查询:")
search_entry = tk.Entry(root, width=10)
search_button = tk.Button(root, text="搜索", command=search_transaction)
transaction_text = tk.Text(root, height=10, width=30)
save_button = tk.Button(root, text="保存", command=save_transaction)
# 布局组件
amount_label.grid(row=0, column=0)
amount_entry.grid(row=0, column=1)
type_label.grid(row=0, column=2)
type_menu.grid(row=0, column=3)
add_button.grid(row=0, column=4)
balance_label.grid(row=1, column=0, columnspan=5)
search_label.grid(row=2, column=0)
search_entry.grid(row=2, column=1)
search_button.grid(row=2, column=2)
transaction_text.grid(row=3, column=0, columnspan=5)
save_button.grid(row=4, column=4)
# 初始化显示
update_display()
# 运行程序
root.mainloop()
```
这个例子和之前的例子类似,但增加了查询和保存功能。用户可以输入关键词进行查询,查询到的交易记录会显示在Text控件中。点击“保存”按钮,程序会将交易记录保存到csv文件中。
阅读全文
相关推荐















