基于 Python tkinter 的查询器

  • 简介:本文主要介绍如何用 Python 内置的 tkinter 写一个查询工具。

准备

  • 环境
    • Windows 10
    • Python 3.7.3
    • VS Code
  • 依赖
    • tkinter
    • python-Levenshtein
    • fuzzywuzzy

目录结构及运行界面

目录结构

图1 目录结构图

查询界面

图2 查询界面图

查询结果

图3 查询结果图

具体实现

import tkinter as tk
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from fuzzywuzzy import fuzz


class Window(object):

    def __init__(self):
        root = tk.Tk()
        root.minsize(580, 320)  # 窗口大小
        root.resizable(width=False, height=False)  # False窗口大小不可变

        # root.iconbitmap('data/icon.ico')   # 无法显示图片

        root.title('鲁迅:都是我说的?!')  # 窗口标题

        label1 = Label(text='句子:')  # 标签
        label1.place(x=10, y=10, width=80, height=25)  # 确定位置
        self.line_text = Entry(root)  # 单行文本输入
        self.line_text.place(x=80, y=10, width=300, height=25)
        button = Button(text='开始查询', command=self.inquiry)  # 按钮
        button.place(x=390, y=10, width=60, height=25)

        self.filemenu = tk.StringVar()  # 下拉列表
        self.file_menu = ttk.Combobox(root, width=12, textvariable=self.filemenu)
        # 列表内容
        self.file_menu['values'] = ('匹配度: 100%', '匹配度: 90%',
                                    '匹配度: 80%', '匹配度: 70%')
        self.file_menu.place(x=460, y=10, width=100, height=25)
        self.file_menu.current(0)  # 当前显示 100%

        label2 = Label(text='查询结果:')
        label2.place(x=10, y=100, width=80, height=20)
        self.text = Text(root)  # 多行文本显示
        self.text.place(x=80, y=50, width=480, height=240)

        self.paragraphs = self.load_data('data/book.txt')  # 数据文件
        root.mainloop()  # 主循环

    '''查询'''

    def inquiry(self):
        sentence = self.line_text.get()  # 获取输入的内容
        matched = []
        score_thresh = self.get_score_thresh()
        self.text.delete(1.0, tk.END)  # 用于删除后续显示的文件
        if not sentence:  # 没有输入句子就查询,会出现弹窗警告
            messagebox.showinfo("Warning", '请先输入需要查询的鲁迅名言')
        else:
            for p in self.paragraphs:
                score = fuzz.partial_ratio(p, sentence)
                if score >= score_thresh and len(sentence) <= len(p):
                    matched.append([score, p])
            infos = []
            # 查找相匹配的内容
            for match in matched:
                infos.append('[匹配度]: %d\n[内容]: %s\n' % (match[0], match[1]))
            if not infos:
                infos.append('未匹配到任何相似度大于或等于%d的句子,请修改匹配度.\n' % score_thresh)
            # 查找到的内容插入文本,并显示
            self.text.insert('insert', '\n\n\n'.join(infos)[:-1])

    '''根据下拉列表获取匹配度'''

    def get_score_thresh(self):
        if self.file_menu.current() == 0:
            return 100
        elif self.file_menu.current() == 1:
            return 90
        elif self.file_menu.current() == 2:
            return 80
        elif self.file_menu.current() == 3:
            return 70

    '''数据导入'''

    def load_data(self, data_path):
        paragraphs = []
        with open(data_path, 'r', encoding='utf-8') as f:
            for line in f.readlines():
                if line.strip():
                    paragraphs.append(line.strip('\n'))
        return paragraphs


if __name__ == '__main__':
    Window()

小结

  • 本文借鉴地址:https://github.com/CharlesPikachu/Tools/tree/master/luxunSentencesQuery 此地址代码基于 PyQt5 模块,Python 版本为 3.6。由于我的 Python 版本为3.7,兼容存在问题,所以我用tkinter 模块改写了代码。原地址教程很详细,感兴趣,可以尝试 PyQt5。
  • 以鲁迅全集为例,通过一句话,查询是否为鲁迅所说。您可以替换成自己想要查询的人物,或者其他资料。
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一些关于基于 Python Tkinter 实现图书管理系统的参考资料。 首先,你可以了解一下 Python Tkinter 的基础知识,比如如何创建窗口、标签、按钮、文本框等控件,以及如何为这些控件添加事件处理函数。你可以参考以下教程: - [Python Tkinter 教程(菜鸟教程)](https://www.runoob.com/python/python-tutorial.html) - [Python Tkinter 教程(官方文档)](https://docs.python.org/3/library/tkinter.html) 然后,你可以开始设计图书管理系统的功能和界面。图书管理系统通常包括以下几个模块: 1. 登录模块:用户需要输入用户名和密码才能进入系统。 2. 图书信息管理模块:包括添加、删除、修改、查询图书信息等功能。 3. 借阅管理模块:包括借阅、归还、续借、查询借阅信息等功能。 4. 用户管理模块:包括添加、删除、修改用户信息等功能。 5. 统计报表模块:可以生成各种统计报表,比如借阅情况、图书流通情况等。 你可以根据这些模块设计系统的界面和功能。下面是一些参考资料: - [Python 图书管理系统(GitHub)](https://github.com/Grumpenstiltskin/Python-Library-Management-System) - [Python 图书管理系统(CSDN)](https://blog.csdn.net/weixin_40778318/article/details/80798328) - [Python 图书管理系统(博客园)](https://www.cnblogs.com/yyds/p/6638973.html) 最后,你需要将界面和功能代码整合起来,实现一个完整的图书管理系统。这个过程可能需要一些时间和经验,但是你可以先从简单的功能开始实现,逐步完善系统。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值