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 七种邮件内容发送方法实例
Apr 22 Python
举例讲解Python设计模式编程中的访问者与观察者模式
Jan 26 Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 Python
一百多行python代码实现抢票助手
Sep 25 Python
详解Python 正则表达式模块
Nov 05 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
Python适配器模式代码实现解析
Aug 02 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
关于Django Models CharField 参数说明
Mar 31 Python
python2和python3哪个使用率高
Jun 23 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 Python
python playwright 自动等待和断言详解
Nov 27 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
深入PHP变量存储的详解
2013/06/13 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
Python 学习笔记
2008/12/27 Python
用实例说明python的*args和**kwargs用法
2013/11/01 Python
用python代码做configure文件
2014/07/20 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
如何用python处理excel表格
2020/06/09 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
自我评价范文分享
2014/01/04 职场文书
会计顶岗实习心得
2014/01/25 职场文书
低碳环保标语
2014/06/12 职场文书
小学生安全责任书
2014/07/25 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
2014年店长工作总结
2014/11/17 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
python自动化测试之Selenium详解
2022/03/13 Python