发现马来朋友使用的英英在线词典比较好用,于是想做一个英英词典的小程序。程序的实现主要包括两部分,1是完成在网页上有效信息的提取,2是python的界面开发。爬虫部分代码很简单。但到了界面部分开发时遇到了一些小问题。为了让英文解释的展示看上去更漂亮一些。需要在使用tkInter的Text控件进行展示时做如下工作:
(1)传入一个长度很长的string类型变量,不同行需要插入换行符
(2)导入Text()后需要有逐行识别该行类型的功能,该行的类型是词典名称、同义词展示还是单词解释?这个 应该很简单,词典名称用等于号来识别,同义词固定空多个空格,这样三种就可以识别了
(3)区分了不同的类型后,需要针对该行进行字体的调整, 这部分百度了好久,才知道答案
使用addtag(tagName,第一个字符位置,最后一个字符位置)函数来定义一个标签名称,而后tag_config(tgName, foreground=‘green4’,font=tkFont.Font(family=‘Courier New Baltic’, size=12, weight=tkFont.NORMAL))来定义具体的字体和字体颜色,字体的所有颜色的引用方法在此链接中查看http://www.science.smith.edu/dftwiki/index.php/Color_Charts_for_TKinter

效果如下:


具体代码如下:

import requests,bs4
import urllib
from tkinter import *
import tkinter.font as tkFont
class YouDaoFanyi(object):def __init__(self):passdef crawl(self,word):url = 'https://www.definitions.net/definition/' + str(word)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}res = requests.get(url,headers=headers)body=bs4.BeautifulSoup(res.text,'html.parser')dicts=body.find(id='definitions-list').find_all('div',class_='rc5')dictText=''for i in dicts:dictName=i.find('h3').find('span').textif dictName=='Princeton\'s WordNet':dictText = dictText+dictName+'\n'li=i.find('ol').find_all('li')for j in li:plist=j.find_all('p')if len(plist)==3:dictText = dictText + '\n'dictText=dictText+plist[0].text+'\n'dictText = dictText +'  '+plist[1].text+'\n'dictText = dictText +'    '+plist[2].text+'\n'elif len(plist)==2:dictText = dictText + '\n'dictText = dictText +plist[0].text+'\n'dictText = dictText +'  '+plist[1].text+'\n'elif dictName=='Wiktionary':dictText = dictText+dictName+'\n'li=i.find('ol').find_all('li')for j in li:plist=j.find_all('p')if len(plist)==3:dictText = dictText + '\n'dictText=dictText+plist[0].text+'\n'dictText = dictText +'  '+plist[1].text+'\n'dictText = dictText +'    '+plist[2].text+'\n'elif len(plist)==2:dictText = dictText + '\n'dictText = dictText +plist[0].text+'\n'dictText = dictText +'  '+plist[1].text+'\n'elif dictName == 'Webster Dictionary':dictText = dictText + '\n'dictText = dictText + '\n'dictText = dictText +dictName+'\n'li = i.find('ol').find_all('li')for j in li:plist = j.find_all('p')dictText = dictText + '\n'dictText = dictText + plist[0].text+'\n'dictText = dictText +'  '+plist[1].text+'\n'return dictTextclass Application(object):def __init__(self):self.window = Tk()self.fanyi = YouDaoFanyi()#print(tkFont.families())#打印可选字体self.window.title(u'词典 designed by zhengyb')#设置窗口大小和位置self.window.geometry('700x700+500+200')#self.window.minsize(700,700)#self.window.maxsize(700,700)#创建一个文本框#self.entry = Entry(self.window)#self.entry.place(x=10,y=10,width=200,height=25)#self.entry.bind("<Key-Return>",self.submit1)self.result_text1 = Text(self.window,background = 'azure',font='bold')# 喜欢什么背景色就在这里面找哦,但是有色差,得多试试:http://www.science.smith.edu/dftwiki/index.php/Color_Charts_for_TKinterself.result_text1.place(x = 10,y = 5,width = 680,height = 20)self.result_text1.bind("<Key-Return>",self.submit1)#创建一个按钮#为按钮添加事件self.submit_btn = Button(self.window,text=u'查询',command=self.submit)self.submit_btn.place(x=255,y=25,width=35,height=25)self.submit_btn2 = Button(self.window,text=u'清空',command = self.clean)self.submit_btn2.place(x=300,y=25,width=35,height=25)#翻译结果标题self.title_label = Label(self.window,text=u'结果:')self.title_label.place(x=10,y=25)#翻译结果self.result_text = Text(self.window,background = 'snow2')self.result_text.place(x = 10,y = 50,width = 680,height = 600)#回车翻译def submit(self):#从输入框获取用户输入的值content = self.result_text1.get(0.0,END).strip().replace("\n"," ")#print把这个值传送给服务器进行翻译result = self.fanyi.crawl(content)#将结果显示在窗口中的文本框中self.result_text.delete(0.0,END)self.result_text.insert(END, result)#self.result_text.insert(INSERT, 'I love study very well')rowlist=result.split('\n')count=1rowNo=1strIcld=content+'('str2Icld=content.title()+'('for m in rowlist:if (strIcld in m) or (str2Icld in m) or ((',' in m) and('(' in m) and content in m):st=str(count)+'.0'ed=str(count)+'.'ed=ed+str(m.find('('))st2 = str(count) + '.'st2=st2+str(m.find('(')+1)ed2 = str(count) + '.200'tgName='tag'+str(rowNo)rowNo=rowNo+1tgName1 = 'tag' + str(rowNo)rowNo=rowNo+1
#               print(st+' '+ed+' '+tgName)self.result_text.tag_add(tgName, st,ed)self.result_text.tag_config(tgName, foreground='black',font=tkFont.Font(family='Arial', size=14, weight=tkFont.BOLD))self.result_text.tag_add(tgName1, st2, ed2)self.result_text.tag_config(tgName1, foreground='gray',font=tkFont.Font(family='Helvetica', size=12, weight=tkFont.NORMAL))elif '    ' in m:st4 = str(count) + '.0'ed4 = str(count) + '.200'tgName3 = 'tag' + str(rowNo)rowNo = rowNo + 1self.result_text.tag_add(tgName3, st4, ed4)self.result_text.tag_config(tgName3, foreground='green4',font=tkFont.Font(family='Courier New Baltic', size=12, weight=tkFont.NORMAL))elif m=='Wiktionary' or m=='Webster Dictionary' or m=='Princeton\'s WordNet':st5 = str(count) + '.0'ed5 = str(count) + '.200'tgName4 = 'tag' + str(rowNo)rowNo = rowNo + 1self.result_text.tag_add(tgName4, st5, ed5)self.result_text.tag_config(tgName4, foreground='dark blue',font=tkFont.Font(family='Courier New Baltic', size=15, weight=tkFont.BOLD))else:st3 = str(count) + '.0'ed3=str(count)+'.200'tgName2 = 'tag' + str(rowNo)rowNo=rowNo+1self.result_text.tag_add(tgName2, st3, ed3)self.result_text.tag_config(tgName2, foreground='violet red',font=tkFont.Font(family='Arial', size=12, weight=tkFont.NORMAL))count=count+1#清空文本域中的内容def clean(self):self.result_text1.delete(0.0,END)self.result_text.delete(0.0,END)def run(self):self.window.mainloop()def submit1(self,event):#从输入框获取用户输入的值#content = self.result_text1.get(0.0,END).strip().replace("\n"," ")#把这个值传送给服务器进行翻译self.submit()self.result_text1.delete(0.0, END)#result = self.fanyi.crawl(content)#将结果显示在窗口中的文本框中#self.result_text.delete(0.0,END)#self.result_text.insert(END,result)
if __name__=="__main__":app = Application()app.run()

python英英字典开发过程中学到的tkFont的使用相关推荐

  1. python有道字典_Python基于有道实现英汉字典功能

    本文实例讲述了Python基于有道实现英汉字典功能的方法.分享给大家供大家参考.具体如下: import re,urllib aa="http://dict.youdao.com/searc ...

  2. python制作英汉词典_Python基于有道实现英汉字典功能

    本文实例讲述了Python基于有道实现英汉字典功能的方法.分享给大家供大家参考.具体如下: import re,urllib aa="http://dict.youdao.com/searc ...

  3. python英汉字典_Python基于有道实现英汉字典功能

    Python基于有道实现英汉字典功能 本文实例讲述了Python基于有道实现英汉字典功能的方法.分享给大家供大家参考.具体如下: import re,urllib aa="http://di ...

  4. python英汉字典,Python基于有道实现英汉字典功能,python英汉字典

    Python基于有道实现英汉字典功能,python英汉字典 本文实例讲述了Python基于有道实现英汉字典功能的方法.分享给大家供大家参考.具体如下: import re,urllib aa=&quo ...

  5. Python GUI实现英汉字典功能、Python tkinter编写英汉字典

    Python GUI实现字典功能.Python tkinter编写字典 需求分析 本地字典文件内容如下: Africa n. 非洲 Aids n. 爱滋病 America n. 美洲 April n. ...

  6. python制作英汉词典_python如何制作英文字典

    本文实例为大家分享了python制作英文字典的具体代码,供大家参考,具体内容如下 功能有添加单词,多次添加单词的意思,查询,退出,建立单词文件. keys=[] dic={} def rdic(): ...

  7. Python控制台英汉-汉英电子词典

    2019独角兽企业重金招聘Python工程师标准>>> Python控制台英汉-汉英电子词典 By qianghaohao(CodeNutter) 用python实现了下控制台电子词 ...

  8. 好程序员Java分享Java案例_英汉字典

    在写代码的时候,当鼠标悬浮在某一个单词上面的时候,有道词典点有时会弹出一个消息气泡,在里面中给出关于这个单词相关的解释,下面给大家展示一个使用Java基础语言编写的英汉字典案例:      实现功能: ...

  9. curd什么意思中文_查英英字典:What a shame是什么意思?

    查英英字典:What a shame是什么意思? "互联网+"时代学习英语有两种"学习方法":简单粗暴学法和自己动手丰衣足食法. 一.简单粗暴法:直接问老师要& ...

最新文章

  1. Codeforces Beta Round #96 (Div. 1) D. Constants in the language of Shakespeare 贪心
  2. C++中不允许重复定义全局变量
  3. VC包含目录、附加依赖项、库目录及具体设置
  4. POJ 2337 欧拉回路
  5. mysql数据库迁移到另一台电脑上
  6. 旋转根组件 Learn Unreal Engine (with C++)
  7. java幂等性原理_Java接口幂等性设计原理解析
  8. Java类类getGenericSuperclass()方法及示例
  9. STM32F103:二.(6)mrc522卡号读取
  10. Unity5 Survival Shooter开发笔记2
  11. 又涨啦!2021年6月程序员工资出炉
  12. 基于CNN的中文文本分类算法(可应用于垃圾文本过滤、情感分析等场景)
  13. 加载elementor时出现问题_Elementor新手教程:怎么使用elementor设计网站页面!
  14. sqlmap使用教程(超详细)
  15. 数学建模论文写作——框架和要点
  16. eclipse使用jsp
  17. 【神经网络】综合篇——人工神经网络、卷积神经网络、循环神经网络、生成对抗网络
  18. dataworks手册_DataWorks 使用教程
  19. cahrt框架 ios_iOS-Charts介绍
  20. java千万级别数据处理(2)-千万级别FTP下载

热门文章

  1. 学考228XK_80计算机,复旦选课学概论.doc
  2. ArcGIS学习06:地理数据库
  3. 石头扫地机器人卡顿_石头扫地机器人T7系列APP有这些小技巧
  4. SAP-FICO LSMW批量导财务凭证批量导固定资产主数据-AS91
  5. JAVA中List 转long[]的方法
  6. 3D游戏恶魔与牧师(动作分离)
  7. 数据库内连接、左外连接、右外连接中的on、and、where条件使用
  8. C++中三种产生随机数的方法
  9. 引导修复第一类:关于Windows的引导修复
  10. 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典