基於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同樣可以實現較多的其他功能。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM