python名人名言代码打印_基于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\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 仍不能成功,各位如能解决,劳烦告知,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值