作者:如缕清风
本文为博主原创,未经允许,请勿转载:https://www.cnblogs.com/warren2123/articles/11826976.html
本文基于自动化查找的目的,应用Python实现相关功能,并考虑到以代码的形式交互缺失视觉上的可读性等需求。通过GUI的形式可以很好的实现自动查找的目的,而且有着较好的可读性和互动性。 为了实现目的,总体来说存在着三个难点:数据库读取、查找功能、GUI界面,文章分别从这三个角度来逐步实现。
由于考虑到数据的读取、存储、修改的后续需求,本文采用sqlalchemy模块与MySQL进行交互,以下是利用python编写交互接口:
from sqlalchemy import create_engine conn = create_engine(‘mysql+mysqldb://数据库用户名:密码@localhost:端口号/数据库名?charset=编码格式‘)
数据的查找功能基于re(正则表达式)、pandas进行实现。查找功能通过类Class(Result)的形式定义,包含两个函数功能:search、result,实现内容查询以及查找内容返回。
import pandas as pd import re sql = ‘select * from books‘ data = pd.read_sql(sql, conn) captions = tuple(pd.Series(data[‘类别‘].value_counts()).index) class Result(): def __init__(self, data, string, caption=‘书名‘): self.data = data self.string = string self.caption = caption def search(self, x): res = re.search(r‘%s‘ % self.string, x, re.IGNORECASE) if res: res = True else: res = False return res def result(self): if self.caption != ‘书名‘: x = self.data.loc[self.data[‘类别‘] == self.caption] outcome = x[x[‘书名‘].apply(self.search)] else: outcome = self.data[self.data[‘%s‘ % self.caption].apply(self.search)] return outcome
1、展示界面
展示界面通过tkinter进行定义,window是tkinter定义的显示GUI窗口,window.title定义GUI的窗口名称,window.geometry定义GUI窗口大小。
import tkinter as tk window = tk.Tk() window.title("书籍信息查询") window.geometry("700x350") window.mainloop()
运行结果如下所示:
2、标签及输入框
定义GUI展示界面后,需要为界面添加相应的功能,如标签、输入框。tk.Label方法实现标签功能的显示,tk.Entry方法实现文本输入框功能,tk.place方法定义相应的功能在GUI界面上的位置,tk.StringVar方法定义GUI界面的字符串内容。
tk.Label(window, text=‘书名:‘).place(x=10, y=15) book_name = tk.StringVar() entry_book_name = tk.Entry(window, width=28, textvariable=book_name) entry_book_name.place(x=50, y=15)
运行结果如下所示:
3、下拉框
进一步需要定义GUI界面的下拉框功能实现,ttk.Combobox方法实现下拉框,下拉框的显示内容通过定义下拉框的‘values’属性,captions是定义好的内容信息,可以通过手动添加分类,以及从数据中提取相应特征内容。
from tkinter import ttk tk.Label(window, text=‘类别:‘).place(x=280, y=15) number = tk.StringVar() numberChoose = ttk.Combobox(window, width=20, textvariable=number) numberChoose[‘values‘] = captions numberChoose.place(x=320, y=15)
运行结果如下所示:
4、按钮
GUI界面的按钮通过tk.Button方法实现,利用参数text显示按钮的名称,参数command表示按钮执行的操作,本文的按钮实现查找方法,以显示查找的文本信息。
btn_login = tk.Button(window, text=‘查询‘, width=6, command=show_books) btn_login.place(x=530, y=10)
运行结果如下所示:
5、表格数据展示
数据以表格的形式进行展示,通过ttk.Treeview方法实现,columns参数控制表格框的列名,tree.column的width参数控制列的宽度,tree.heading的text表示显示的列名,tree.grid控制表格显示的位置。
columns = tuple(data.columns) tree = ttk.Treeview(window, height=13, show="headings", selectmode=‘browse‘, columns=columns) tree.column(columns[0], width=230) tree.column(columns[1], width=100) tree.column(columns[2], width=100) tree.column(columns[3], width=100) tree.column(columns[4], width=50) tree.column(columns[5], width=80) for i in columns: tree.heading(i, text=i) tree.grid(row=0, column=0, padx=10, pady=50, sticky=‘nsew‘)
运行结果如下所示:
6、数据查找功能实现
完整GUI界面显示如下,通过书名查找当前在书库中的书籍信息数据,本文以”三体“为例进行查找。
通过类别显示该类别的所有书籍,下图以小说类别展示当前书库中的书籍信息:
本文通过Python基于Tkinter构建一个书籍信息查询系统,实现了较好的互动行,能够有效的管理书库内容。后续还可以实现当前的书籍信息修改,增加书籍信息等操作,降低了当前数据库操作成本,而且能够快速上手,文章只是Python实现的一个简单方法,Tkinter同样可以实现较多的其他功能。
原文:https://www.cnblogs.com/warren2123/p/11826976.html