作者:如縷清風
本文為博主原創,未經允許,請勿轉載: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)的形式定義,包含兩個函數功能: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
四、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.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同樣可以實現較多的其他功能。
