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

本文介绍了如何利用Python的Tkinter库和quicktranslate模块创建一个简单的在线翻译工具,支持单词和段落翻译,内置百度、有道和谷歌翻译。只需双击翻译单词,输入的中文或英文段落自动转换。
摘要由CSDN通过智能技术生成

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()

这是效果,双击单词可自动查词,段落翻译默认用有道,不行用谷歌;单词翻译默认百度,不行用有道。因为百度不支持段落翻译。
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值