Python使用tkinter制作在线翻译软件


Posted in Python onFebruary 22, 2021

tkinter的功能是如此强大,竟然还能做翻译软件。当然是在线的,我发现有一个quicktranslate模块,可以提供在线翻译功能,相当于提供了一个翻译的接口,利用它就可以制作在线翻译软件了。下面是代码,分享给大家。

注意要首先 pip install quicktranslate

#-*- coding:utf-8 -*-
import tkinter as tk  #使用Tkinter前需要先导入
from tkinter import messagebox,ttk
import datetime,os,time,re,requests
from quicktranslate import get_translate_baidu,get_translate_youdao

class MY_GUI(tk.Tk):
 #初始化
 def __init__(self):
 super().__init__()
 self.set_window()
 self.set_frame()
 self.set_body()
 #设置窗口
 def set_window(self):
 self.title("文本翻译工具v1.0")   #窗口名
 w_width=800        #工具宽度
 w_height=600       #工具高度 
 scn_width=self.maxsize()[0]    #屏幕宽度
 x_point=(scn_width-w_width)//2   #取点让工具居中
 self.geometry('%dx%d+%d+%d' %(w_width,w_height,x_point,100))
 #设置框架
 def set_frame(self):
 self.frame1=tk.Frame(self,pady=15,padx=15)
 self.frame1.grid(row=0,column=0,sticky='w')
 self.frame2=tk.Frame(self,pady=15,padx=15)
 self.frame2.grid(row=1,column=0,sticky='w')
 self.frame3=tk.Frame(self,pady=15,padx=15)
 self.frame3.grid(row=2,column=0,sticky='w')
 #设置组件
 def set_body(self):
 ttk.Label(self.frame1,text='输入要翻译的内容:').grid(row=0,column=0,sticky='w')
 ybar=ttk.Scrollbar(self.frame1,orient='vertical')
 textarea=tk.Text(self.frame1,width=100,height=12,yscrollcommand=ybar.set)
 ybar['command']=textarea.yview
 textarea.grid(row=1,column=0,columnspan=2)
 ybar.grid(row=1,column=2,sticky='ns')
 textarea.bind("<Double-Button-1>",lambda event:self.getword(event,textarea))  #双击触发单词翻译
 ttk.Button(self.frame1,text='点击翻译',command=lambda:self.translator(textarea.get(1.0,'end'))).grid(row=2,column=0,sticky='w')
 ttk.Button(self.frame1,text='清空',command=lambda:self.clear(textarea)).grid(row=2,column=1,sticky='w')
 #功能函数
 def clear(self,textarea):    #清空文本框
 textarea.delete(1.0,'end')

 def is_cn(self,uchar):
 """判断一个unicode是否是汉字"""
 if uchar >= u'\u4e00' and uchar<=u'\u9fa5':
  return True
 else:
  return False

 def filterchar(self,char):   #过滤字母
 word=filter(str.isalpha, char)
 word=''.join(list(word))
 return word

 def getword(self,event,textarea):  #单词翻译
 place=textarea.index('current')
 row=int(place.split('.')[0])  #第几行
 col=int(place.split('.')[1])  #第几列
 col_start=col-15
 col_end=col+15
 part1=textarea.get(str(row)+'.'+str(col_start),str(row)+'.'+str(col)).split()[-1]
 part2=textarea.get(str(row)+'.'+str(col),str(row)+'.'+str(col_end)).split()[0]
 word_f=self.filterchar(part1+part2)
 word_t=get_translate_baidu(word_f)     #百度翻译
 if(word_t=='wrong!'):
  word_t=get_translate_youdao(word_f)    #百度不行就用有道翻译
 textarea=tk.Text(self.frame3,width=100,height=8) #第三个框架添加文本框
 textarea.grid(row=0,column=0) 
 textarea.delete(1.0,'end')
 textarea.insert(1.0,word_f+':\n'+word_t)   #文本框填入翻译结果
 #生词写入生词本
 if(word_t!='wrong!'):
  with open('word.txt','a') as f:
  f.write(word_f+' : '+word_t+"\n")

 def translator(self,content):    #段落翻译
 test_url='http://youdao.com'
 try:
  requests.get(test_url,timeout=2)
 except:
  messagebox.showerror('警告','没有联网')
 if(self.is_cn(content)):    #如果输入的是中文,那就是中译英,要用英文句号
  sep="."
 else:
  sep="。"
 contents=content.split('\n')   #段落分割
 strs=""
 for paragraph in contents:
  if(paragraph):
  sentences=paragraph.split('.')  #句子
  for sentence in sentences:
   if(sentence):
   res=get_translate_youdao(sentence)  #有道翻译
   if(res=='wrong!'):
    res=get_translate_google(sentence) #有道不行就用谷歌翻译
   strs+=res+sep     
  strs+="\n"
 ybar=ttk.Scrollbar(self.frame2,orient='vertical')
 textarea=tk.Text(self.frame2,width=100,height=12,yscrollcommand=ybar.set)  #第二个框架添加文本框
 textarea.bind("<Double-Button-1>",lambda event:self.getword(event,textarea)) #双击触发单词翻译 如果是中译英
 ybar['command']=textarea.yview
 textarea.grid(row=0,column=0)
 textarea.delete(1.0,'end')
 textarea.insert(1.0,strs)              #文本框填入翻译结果
 ybar.grid(row=0,column=1,sticky='ns')

app=MY_GUI()
app.mainloop()

这是效果,双击单词可自动查词,段落翻译默认用有道,不行用谷歌;单词翻译默认百度,不行用有道。

Python使用tkinter制作在线翻译软件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
Python利用IPython提高开发效率
Aug 10 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
tornado 多进程模式解析
Jan 15 Python
解决Mac安装scrapy失败的问题
Jun 13 Python
关于python2 csv写入空白行的问题
Jun 22 Python
python 读写文件,按行修改文件的方法
Jul 12 Python
Python中的四种交换数值的方法解析
Nov 18 Python
Python实现扫码工具的示例代码
Oct 09 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
常用的Python代码调试工具总结
Jun 23 Python
Python中使用Selenium环境安装的方法步骤
Feb 22 #Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 #Python
python实现计算图形面积
Feb 22 #Python
python实现银行账户系统
Feb 22 #Python
Django实现简单的分页功能
Feb 22 #Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 #Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 #Python
You might like
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
php生成验证码函数
2015/10/20 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
python获取网页状态码示例
2014/03/30 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
python计算列表内各元素的个数实例
2018/06/29 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
python输入多行字符串的方法总结
2019/07/02 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
水电维修专业推荐信
2014/09/06 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
Python如何用re模块实现简易tokenizer
2022/05/02 Python