基于Tkinter的图书管理系统
概述
虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要为基于Tkinter的图书管理系统,包括书籍信息的添加、修改、保存功能。
设计思路
1.页面布局:主要分为上下两部分 a. 书籍信息展示区域b. 书本管理区域
2.事件监听:通过给功能按钮绑定事件,来实现不同的功能,如:添加书本信息、修改书本信息等功能。
涉及知识点
- 开发工具:Python3.8 , PyCharm2022
- Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
- TreeView控件是用来展示树形结构或列表结构的一个UI控件;第一列用来表示树状结构,除第一列外后面几列的是列表结构。
- Button按钮控件是一个标准的tkinter控件。按钮上可以显示文字或者图片作为提示信息。文字只能使用一种字体以及颜色。按钮的最主要作用是被点击后,可以调用指定的回调函数,完成特定的功能。比如,关闭窗口、执行命令等。
- Label控件,用来显示指定的窗口中的文本和图像。
核心代码
绘制页面
def place_tree(self):
columns = ['no', 'name', 'author', 'publisher', 'price', 'abstract']
text_arr = ['编号', '书名', '作者', '出版社', '价格', '摘要']
self.tree = ttk.Treeview(window, show="headings", columns=columns)
for i in range(len(columns)):
self.tree.heading(columns[i], text=text_arr[i])
self.tree.column(columns[i], width=150, anchor='center')
self.tree.place(x=0, y=0, width=900, height=300)
for bool_val in self.book_val_arr:
self.tree.insert('', 'end', values=bool_val)
for i in range(len(columns)):
val = tk.Variable()
self.val_arr.append(val)
tk.Label(window, text=text_arr[i], bg='#b2baa4', fg='#ffffff', padx=5, pady=4).place(x=20, y=320 + i * 35)
tk.Entry(window, textvariable=self.val_arr[i], bg='#f7f8f6').place(x=80, y=320 + i * 35)
tk.Button(window, text='添加书本', command=self.add_book).place(x=80, y=540, width=120)
self.edit_val_arr = []
for i in range(len(columns)):
val = tk.Variable()
self.edit_val_arr.append(val)
tk.Label(window, text=text_arr[i], bg='#e7cdc1', fg='#ffffff', padx=5, pady=4).place(x=320, y=320 + i * 35)
tk.Entry(window, textvariable=self.edit_val_arr[i], bg='#f9f2f0').place(x=380, y=320 + i * 35)
tk.Button(window, text='修改书本', command=self.edit_book).place(x=380, y=540, width=120)
self.tree.bind('<<TreeviewSelect>>', self.treeview_select)
tk.Button(window, text='保存当前书本信息', command=self.save_pkl).place(x=660, y=540, width=120)
添加书籍信息事件
def add_book(self):
values = []
for val in self.val_arr:
v = val.get()
if v == '':
messagebox.showinfo('提示', '请输入内容')
return
values.append(v)
for book in self.tree.get_children():
no = self.tree.item(book)['values'][0]
if no == values[0]:
messagebox.showinfo('提示', '编号已经存在')
return
self.tree.insert('', 'end', values=values)
for val in self.val_arr:
val.set('')
编辑书籍信息事件
def edit_book(self):
values = []
for val in self.edit_val_arr:
v = val.get()
if v == '':
messagebox.showinfo('提示', '请输入内容')
return
values.append(v)
self.tree.item(self.tree.selection()[0], values=values)
保存书籍信息事件
def save_pkl(self):
f = open('data.pkl', 'wb')
book_val_arr = []
for book in self.tree.get_children():
book_val = self.tree.item(book)['values']
book_val_arr.append(book_val)
pickle.dump(book_val_arr, f)
f.close()
读取书籍记录函数
def read_pkl():
if os.path.exists('data.pkl'):
f = open('data.pkl', 'rb')
book_val_arr = pickle.load(f)
f.close()
return book_val_arr
else:
return []
运行界面
初始界面
添加书籍
修改书籍
未输入内容时添加书本
保存书本信息
重启显示更新后的书本信息