基于Tkinter实现书籍查找GUI

作者:如缕清风

本文为博主原创,未经允许,请勿转载:https://www.cnblogs.com/warren2123/articles/11826976.html


 

一、前言

        本文基于自动化查找的目的,应用Python实现相关功能,并考虑到以代码的形式交互缺失视觉上的可读性等需求。通过GUI的形式可以很好的实现自动查找的目的,而且有着较好的可读性和互动性。 为了实现目的,总体来说存在着三个难点:数据库读取、查找功能、GUI界面,文章分别从这三个角度来逐步实现。

 

二、MySQL接口构建

        由于考虑到数据的读取、存储、修改的后续需求,本文采用sqlalchemy模块与MySQL进行交互,以下是利用python编写交互接口:

from sqlalchemy import create_engine

conn = create_engine('mysql+mysqldb://数据库用户名:密码@localhost:端口号/数据库名?charset=编码格式')

  

三、查找功能实现

        数据的查找功能基于re(正则表达式)、pandas进行实现。查找功能通过类Class(Result)的形式定义,包含两个函数功能:searchresult,实现内容查询以及查找内容返回。

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

 

四、GUI界面搭建

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.columnwidth参数控制列的宽度,tree.headingtext表示显示的列名,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同样可以实现较多的其他功能。 

posted @ 2019-11-09 17:30  如缕清风  阅读(1895)  评论(6编辑  收藏  举报