Python使用tkinter制作在线翻译软件
作者:chaodaibing 发布时间:2021-04-19 10:36:06
标签:python,tkinter,翻译软件
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()
这是效果,双击单词可自动查词,段落翻译默认用有道,不行用谷歌;单词翻译默认百度,不行用有道。
来源:https://blog.csdn.net/chaodaibing/article/details/113925474


猜你喜欢
- Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。分页一般和表格一起用,分页链接作为表格的一部分,将分页链
- 1.创建xml字段在表xmlTest内创建一个字段,命名_x,设置数据类型为xml。2.写入xmlinsert into xmlTest (
- 最近这几天,学习了一下python,对于爬虫比较感兴趣,就做了一个简单的爬虫项目,使用Python的库Tkinsert做了一个界面,感觉这个
- 最近想研究下SQL SERVER2012 Enterprise版本的数据库,听说功能很强大。我是在win7上安装的,安装的过程很顺利,我在用
- 通过logging模块,重写一个logging2模块,独立开启线程,将待写的日志信息异步放入队列,做到日志输出不影响主流程性能,环境pyth
- 目的: 根据传入的选择器类型选出第一个符合的DOM对象。 ①可以通过id获取DOM对象,例如 $("#adom
- 今天发现有一个程序插入的时间不对,而该字段是配置的默认值 CURRENT_TIMESTAMP,初步判断是数据库的时区设置问题。查看时区登录数
- MYSQL在一个字段值前面加字符窜,如下:member 表名card 字段名update member SET card = '00
- 我们从一个测试开始。下面这个函数的功能是什么? def foo(lst): a = 0 for i in
- 最近在学习python爬虫,看到网上有很多关于模拟豆瓣登录的例子,随意找了一个试了下,发现不能运行,对比了一下代码和豆瓣网站,发现原来是豆瓣
- 资源React-16.8.*react-router-dom-4.3.*TypeScript-3.5.*webpack-4.*eslint-
- 概述gRPC 是谷歌开源的一个rpc(远程程序调用)框架,可以轻松实现跨语言,跨平台编程,其采用gRPC协议(基于HTTP2)。rpc:re
- Microsoft® SQL Server™ 2000 由一系列产品组成,不仅能够满足最大的数据处理系统
- 如下所示:import tensorflow as tfa = tf.Variable([4,5,6])b = tf.Variable([1
- 如下所示:# -*- coding: utf-8 -*-from __future__ import unicode_literalsfro
- 我们知道 Pandas 是数据科学社区中流行的 Python 包,它包含许多函数和方法来分析数据。尽管它的功能对于数据分析来说足够有效,但定
- 下面和大家分享一下具体的实现过程。HTML标签结构:<ul class="animation_menu">&
- 本文实例讲述了mysql累积聚合原理与用法。分享给大家供大家参考,具体如下:累积聚合为聚合从序列内第一个元素到当前元素的数据,如为每个员工返
- 本文为大家分享了Python3实现发送QQ邮件功能:html,供大家参考,具体内容如下之前已经成功发送了qq邮件。下面贴出html格式的qq
- 先给大家介绍下Python 字符串前面加u,r,b,f的含义(字符串前缀)1、字符串前加 u例:u"我是含有中文字符组成的字符串。