tkinter的功能是如此強大,竟然還能做翻譯軟件。當然是在線的,我發(fā)現(xiàn)有一個quicktranslate模塊,可以提供在線翻譯功能,相當于提供了一個翻譯的接口,利用它就可以制作在線翻譯軟件了。下面是代碼,分享給大家。
#-*- coding:utf-8 -*-
import tkinter as tk #使用Tkinter前需要先導(dǎo)入
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()
#設(shè)置窗口
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))
#設(shè)置框架
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')
#設(shè)置組件
def set_body(self):
ttk.Label(self.frame1,text='輸入要翻譯的內(nèi)容:').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)) #雙擊觸發(fā)單詞翻譯
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')
#功能函數(shù)
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) #文本框填入翻譯結(jié)果
#生詞寫入生詞本
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('警告','沒有聯(lián)網(wǎng)')
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)) #雙擊觸發(fā)單詞翻譯 如果是中譯英
ybar['command']=textarea.yview
textarea.grid(row=0,column=0)
textarea.delete(1.0,'end')
textarea.insert(1.0,strs) #文本框填入翻譯結(jié)果
ybar.grid(row=0,column=1,sticky='ns')
app=MY_GUI()
app.mainloop()