目录
一,模块搭建
1,定义险种对象
2,重写构造
3,重写toString
4,文件写入
pojo包下面的record文件,完整代码
import pickle
# 险种对象
class Record:
record_id: str
record_name: str
record_money: float
record_type: str
# 重写构造
def __init__(self, record_id: str, record_name: str, record_money: str, record_type: str):
self.record_id = record_id
self.record_name = record_name
self.record_money = record_money
self.record_type = record_type
# 重写toString方法
def __str__(self):
return f'编号{self.record_id}名字{self.record_name}金额{self.record_money}缴费类型{self.record_type}'
if __name__=='__main__':
r = Record('10001', '小宝', 3000, '医疗保险')
print(r)
# with open('record.txt','w',encoding='utf-8') as f:
#报错 TypeError: write() argument must be str, not bytes
# b binary 二进制
# with open('record.txt', 'wb') as f:#wb写入二进制
# pickle.dump(r,f)#把对象r放到文件f里
with open('record.txt','rb') as f:
print(pickle.load(f))
控制台运行结果
二,界面搭建
main包下的main文件
1,新建窗口
# 新建一个窗口
window=Tk()
2,为窗口设置标题
# 设置标题
window.title(‘险种管理’)
3,设置窗口大小
# 设置大小 widthxheightt+x+y
window.geometry(‘400x400+200+200’)
4,编写窗口内容
# 编写控件Treeview
table = Treeview(columns=(‘id’,‘name’,‘money’,‘type’),show=‘headings’)
table.column(‘id’,width=100)
table.column(‘name’,width=100)
table.column(‘money’,width=100)
table.column(‘type’,width=100)
table.heading(‘id’,text=‘记录编号’)
table.heading(‘name’,text=‘缴费者’)
table.heading(‘money’,text=‘缴费金额’)
table.heading(‘type’,text=‘缴费类型’)
5,显示窗口
# 让控件显示
table.pack()
6,运行窗口
# 让窗口运行
window.mainloop()
控制台运行效果
三,功能完成
1,增加:追加
2,根据下标删除,移除元素,注意不是移除下标
注意:
loads直接指定二进制的数据
load直接读取文件
manager包下recordManager文件,完整代码
import pickle
from pojo.record import Record
class RecordManager:
records: list = []
def __init__(self):
# 初始化后开始加载文件中的数据
with open('record.txt', 'rb') as f:
data = f.read()
if data == b'':
# loads直接指定二进制的数据
self.records = pickle.loads(f)
# print('=======',f.read())
# load直接读取文件
# self.records=pickle.load(f)
def add_record(self, record):
assert isinstance(record, Record)
self.records.append(record)
# remove() 移除元素
# pop() 移除下标
def delete_record(self, record_id: str):
for r in self.records:
assert isinstance(r, Record)
if r.record_id == record_id:
self.records.remove(r)
break
else:
print("没有这个人")
def print_record(self):
for r in self.records:
print(r)
def save_record(self):
with open('record.txt', 'wb') as f:
pickle.dump(self.records, f)
manager = RecordManager()
manager.add_record(Record('10002', '小??', 5000, '生育保险'))
manager.add_record(Record('10003', '小??', 3000, '失业保险'))
manager.print_record()
manager.save_record()
# Java中
# 序列化:将对象变成文件
# 反序列化:将文件变成对象
控制台运行结果
1,增加:
**from tkinter import simpledialog-----导包
simpledialog.askstring(‘title’,‘prompt’)----提示标题,提示**
2,删除
①获取被选中的行
②获取这行的数据(获取这行的字典对象,获取字典对象的值)
# 获取被选中的行
if len(table.selection())>0:
# 获取当前这行数据
# table.item(table.selection()[0])获得字典对象
# [“values”]获取字典的值
id=table.item(table.selection()[0])[“values”][0]
3,加载
①获取所有的元素
②清空元素
注意:END是一个常量
4,保存
main包下main文件,完整代码
# GUI界面编程
# 界面包
from tkinter import *
from tkinter import simpledialog
from tkinter.ttk import Treeview
from tkinter import messagebox as message
from manager.recordManager import RecordManager
from pojo.record import Record
manager=RecordManager()
# 新建一个窗口
window=Tk()
# 设置标题
window.title('险种管理')
# 设置大小 widthxheightt+x+y
window.geometry('400x400+200+200')
# 增加
def add():
id=simpledialog.askstring('提示','输入编号')
name=simpledialog.askstring('提示','输入名称')
money=simpledialog.askstring('提示','输入金额')
type=simpledialog.askstring('提示','输入类型')
r=Record(id,name,money,type)
manager.add_record(r)
load()
# 删除
def delete():
# message.showinfo('提示','删除成功')
if message.askyesno('提示','是否删除'):
# pass
# 获取被选中的行
if len(table.selection())>0:
# 获取当前这行数据
# table.item(table.selection()[0])获得字典对象
# ["values"]获取字典的值
id=table.item(table.selection()[0])["values"][0]
manager.delete_record(str(id))
table.delete(table.selection()[0])
#加载
def load():
#1.获得所有元素
for i in table.get_children():
# 2.清空元素
print(i)
table.delete(i)
for r in manager.records:
assert isinstance(r,Record)
table.insert('',END,value=(r.record_id,r.record_name,r.record_money,r.record_type))
# END是一个常量
def save():
manager.save_record()
# 编写控件Treeview
table = Treeview(columns=('id','name','money','type'),show='headings')
table.column('id',width=100)
table.column('name',width=100)
table.column('money',width=100)
table.column('type',width=100)
table.heading('id',text='记录编号')
table.heading('name',text='缴费者')
table.heading('money',text='缴费金额')
table.heading('type',text='缴费类型')
# 让控件显示
table.pack()
# command指令。调用方法
Button(text='增加',command=add).pack()
Button(text='删除',command=delete).pack()
Button(text='加载',command=load).pack()
Button(text='保存',command=save).pack()
# 让窗口运行
window.mainloop()
运行效果
点击加载,数据显示
点击增加
选中一条数据点击删除
可以删除成功