码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-09-24 22:04:25      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:graph   shadow   end   bit   menu   python   鲁迅   默认   ase   

  • 简介:本文主要介绍如何用 Python 内置的 tkinter 写一个查询工具。
  • 很多人学习python,不知道从何学起。
    很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
    很多已经做案例的人,却不知道如何去学习更加高深的知识。
    那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
    QQ群:961562169

准备

  • 环境
    • 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。
  • 以鲁迅全集为例,通过一句话,查询是否为鲁迅所说。您可以替换成自己想要查询的人物,或者其他资料。
  • 小问题
    • 窗口默认图标为羽毛,这里想要设置自定义图标,通过以下代码 root.iconbitmap(‘data/icon.ico‘),并不能成功,修改图片格式为 .jpg 仍不能成功,各位如能解决,劳烦告知,谢谢。

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

标签:graph   shadow   end   bit   menu   python   鲁迅   默认   ase   

原文地址:https://www.cnblogs.com/41280a/p/13724042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!