目录
一,模块搭建
1,定义险种对象
2,重写构造
3,重写toString
4,文件写入
二,界面搭建
1,新建窗口
2,为窗口设置标题
3,设置窗口大小
4,编写窗口内容
5,显示窗口
6,运行窗口
三,功能完成
1,增加:追加
2,根据下标删除,移除元素,注意不是移除下标
注意:
manager包下recordManager文件,完整代码
1,增加:
2,删除
①获取被选中的行
②获取这行的数据(获取这行的字典对象,获取字典对象的值)
3,加载
①获取所有的元素
②清空元素
注意:END是一个常量
4,保存
main包下main文件,完整代码
一,模块搭建
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()
运行效果
点击加载 ,数据显示
点击增加
选中一条数据点击删除
可以删除成功