欢迎光临
我们一直在努力

Python tkinter模块制作名人名言查询工具

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

准备

  • 环境Windows 10Python 3.7.3VS Code
  • 依赖tkinterpython-Levenshteinfuzzywuzzy

目录结构及运行界面

 

 

图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
[内容]: %s
' % (match[0], match[1]))
            if not infos:
                infos.append('未匹配到任何相似度大于或等于%d的句子,请修改匹配度.
' % score_thresh)
            # 查找到的内容插入文本,并显示
            self.text.insert('insert', '


'.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('
'))
        return paragraphs


if __name__ == '__main__':
    Window()

小结

  • 本文借鉴地址:https://github.com/CharlesPikachu/Tools/tree/master/luxunSentencesQuery 此地址代码基于 PyQt5 模块,Python 版本为 3.6。由于我的 Python 版本为3.7,兼容存在问题,所以我用tkinter 模块改写了代码。原地址教程很详细,感兴趣,可以尝试 PyQt5。
  • 以鲁迅全集为例,通过一句话,查询是否为鲁迅所说。您可以替换成自己想要查询的人物,或者其他资料。
  • 小问题窗口默认图标为羽毛,这里想要设置自定义图标,通过以下代码 root.iconbitmap('data/icon.ico'),并不能成功,修改图片格式为 .jpg 仍不能成功,各位如能解决,劳烦告知,谢谢。
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:英协网 » Python tkinter模块制作名人名言查询工具

分享到: 生成海报
avatar

热门文章

  • 评论 抢沙发

    • QQ号
    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址

    登录

    忘记密码 ?

    切换登录

    注册

    我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活