python 制作一个gui界面的翻译工具

一.准备工作

除了Tkinter,还需要google_trans_new,没有安装这个库的朋友,可以使用

pip install google_trans_new

安装一下。

二.预览

1.主界面

2.翻译

3.支持多种语言哦

三.源代码

设计流程很简单,这里就直接贴代码了

3.1 My_Translator-v2.0.py

from tkinter import *
from tkinter import messagebox
from tkinter import ttk
import pyperclip
import threading
from tkinter.filedialog import askopenfilename
from Translator import Do_Trans

"""
使用combobox进行语言记录
"""

class App:
    def __init__(self):
        self.window=Tk()
        self.window.title('翻译器-v2.0')
        width=480
        height=480
        left=(self.window.winfo_screenwidth()-width)/2
        top=(self.window.winfo_screenheight()-height)/2
        self.window.geometry('%dx%d+%d+%d'%(width,height,left,top))
        self.window.resizable(0,0)
        self.create_widget()
        self.set_widget()
        self.place_widget()
        self.language='auto'
        self.window.mainloop()

    def create_widget(self):
        self.l1=ttk.Label(self.window)
        self.t1=Text(self.window)
        self.b1=ttk.Button(self.window)
        self.b2=ttk.Button(self.window)
        self.b3=ttk.Button(self.window)
        self.l2=ttk.Label(self.window)
        self.t2=Text(self.window)
        self.Scroll_vertical1 = Scrollbar(self.window, orient=VERTICAL)
        self.Scroll_vertical2 = Scrollbar(self.window, orient=VERTICAL)
        self.Scroll_level = Scrollbar(self.window, orient=HORIZONTAL)
        self.m=Menu(self.window)
        self.window['menu']=self.m
        self.l3=ttk.Label(self.window)

    def set_widget(self):
        self.l1.config(text='待翻译文本',font=('宋体',10))
        self.b1.config(text='清空输入框',command=lambda:self.thread_it(self.clear_t))
        self.b2.config(text='翻译',command=lambda:self.thread_it(self.do_translate))
        self.b3.config(text='复制翻译内容',command=lambda:self.thread_it(self.copy_t))
        self.l2.config(text='翻译结果',font=('宋体',10))
        self.Scroll_vertical1.config(command=self.t1.yview)
        self.t1['yscrollcommand'] = self.Scroll_vertical1.set
        self.Scroll_vertical2.config(command=self.t2.yview)
        self.t2['yscrollcommand'] = self.Scroll_vertical2.set
        self.t2['xscrollcommand']=self.Scroll_level.set
        self.s1=Menu(self.m,tearoff=False)
        self.s2=Menu(self.m,tearoff=False)
        self.s3=Menu(self.m,tearoff=False)
        self.m.add_cascade(label='文件',menu=self.s1)
        self.m.add_cascade(label='操作',menu=self.s2)
        self.m.add_cascade(label='关于',menu=self.s3)
        self.s1.add_command(label='打开文本文件',command=self.open_txt)
        self.s1.add_separator()
        self.s1.add_command(label='退出',command=self.quit_window)
        self.s2.add_command(label='翻译',command=lambda:self.thread_it(self.do_translate))
        self.s2.add_command(label='选择语言',command=self.open_topleval)
        self.s2.add_command(label='清空内容',command=self.clear_t)
        self.s2.add_command(label='复制结果',command=lambda:self.thread_it(self.copy_t))
        self.s3.add_command(label='说明',command=self.show_infos)
        self.l3_var=StringVar()
        self.l3.config(textvariable=self.l3_var,background='lightblue')
        self.l3_var.set('当前[自动选择]目标语言')
        self.window.bind('<Escape>',self.escape)
        self.t1.bind('<Return>',lambda:self.thread_it(self.do_translate))
        self.window.protocol('WM_DELETE_WINDOW',self.quit_window)
        self.menubar = Menu(self.t1,tearoff=False)
        self.menubar.add_command(label="粘贴", command=self.do_paste)
        self.t1.bind('<Button-3>',self.paste)
        self.menubar2 = Menu(self.t2,tearoff=False)
        self.menubar2.add_command(label="粘贴", command=self.do_paste2)
        self.t2.bind('<Button-3>',self.paste2)
        self.current_select=0

    def place_widget(self):
        self.l1.place(x=200,y=5)
        self.t1.place(x=10,y=30,height=150,width=450)
        self.Scroll_vertical1.place(x=445,y=30,height=150)
        self.b1.place(x=10,y=200)
        self.b2.place(x=180,y=200)
        self.b3.place(x=370,y=200)
        self.l2.place(x=200,y=228)
        self.t2.place(x=10,y=250,height=180,width=450)
        self.Scroll_vertical2.place(x=445,y=250,height=180)
        self.Scroll_level.place(x=10,y=430,width=450)
        self.l3.place(x=0,y=450,width=480,height=30)

    def open_topleval(self):
        self.select_lan_window=Toplevel()
        width=250
        height=50
        left=(self.select_lan_window.winfo_screenwidth()-width)/2
        top=(self.select_lan_window.winfo_screenheight()-height)/2
        self.select_lan_window.geometry('%dx%d+%d+%d'%(width,height,left,top))
        self.select_lan_window.resizable(0,0)
        self.s_combobox_var=StringVar()
        self.language_table=Do_Trans().get_language_table()
        self.s_combobox=ttk.Combobox(self.select_lan_window,textvariable=self.s_combobox_var,justify='center',state='readonly',width=17,value=[language['language'] for language in self.language_table])
        #对当前选中语言进行记录
        if self.current_select==0:
            self.s_combobox.current(0)
        else:
            self.s_combobox.current(self.current_select)
        self.s_b1=ttk.Button(self.select_lan_window,text='选择',command=self.select_lan)
        self.s_combobox.pack(side=LEFT)
        self.s_b1.pack(side=RIGHT)
        self.select_lan_window.mainloop()

    def select_lan(self):
        self.current_select=self.s_combobox.current()
        self.now_language=self.language_table[self.s_combobox.current()]['language']
        messagebox.showinfo('提示',f'当前选择 [{self.now_language}] 作为目标语言')
        self.l3_var.set(f'选择[{self.now_language}]作为目标语言')
        self.now_lan=self.language_table[self.s_combobox.current()]['short']
        self.select_lan_window.destroy()

    def open_txt(self):
        txt_path = askopenfilename(title='选择一个txt文本文件',filetypes=[('txt source file','*.txt')])
        if txt_path:
            self.t1.delete('0.0',END)
            with open(txt_path,'r',encoding='utf-8')as f:
                for line in f.readlines():
                    self.t1.insert(END,line)
            f.close()

    def paste(self,event):
        self.menubar.post(event.x_root,event.y_root)

    def do_paste(self):
        self.t1.insert(END,pyperclip.paste())

    def paste2(self,event):
        self.menubar2.post(event.x_root,event.y_root)

    def do_paste2(self):
        self.t2.insert(END,pyperclip.paste())

    def escape(self,event):
        self.quit_window()

    def quit_window(self):
        ret=messagebox.askyesno('退出','是否要退出?')
        if ret:
            self.window.destroy()

    def do_translate(self):
        try:
            self.aim_language=self.now_lan
        except AttributeError:
            self.aim_language= self.language
        self.t2.delete('0.0',END)
        text=self.t1.get('0.0',END)
        if len(text)!=1:
            self.l3_var.set('正在翻译...')
            t=Do_Trans()
            result=t.translate(text,self.aim_language)
            if result:
                self.l3.config(background='lightblue')
                self.t2.insert(END,result.strip())
                try:
                    self.l3_var.set(f'翻译完成...已翻译为[{self.now_language}]')
                except AttributeError:
                    self.l3_var.set(f'翻译完成...已[自动选择目标语言]')

            else:
                self.l3_var.set('翻译失败,请检查网络!')
                self.l3.config(background='red')
        else:
            messagebox.showwarning('警告','请输入内容!')
            self.l3.config(background='red')
            self.l3_var.set('请输入内容')

    def clear_t(self):
        self.t1.delete('0.0',END)
        self.t2.delete('0.0',END)

    def copy_t(self):
        tr_res=self.t2.get('0.0',END)
        pyperclip.copy(tr_res)
        spam = pyperclip.paste()
        if spam:
            self.l3.config(background='lightyellow')
            self.l3_var.set('复制成功!')

    def show_infos(self):
        messagebox.showinfo('说明','作者:懷淰メ')

    def thread_it(self,func,*args):
        t=threading.Thread(target=func,args=args)
        t.setDaemon(True)
        t.start()

if __name__ == '__main__':
    a=App()

3.2 Translator.py

from google_trans_new import google_translator
import re

class Do_Trans():

    def get_language_table(self,):
        lan_table1 = lan_table.strip().replace("'", '')
        names = re.findall(r'[\u4e00-\u9fa5()]+', lan_table1)
        lans = re.findall(r'[^\u4e00-\u9fa5 \s:()]+', lan_table1)
        language_table = []
        for language in zip(names, lans):
            item = {}
            item['language'] = language[0]
            item['short'] = language[1]
            language_table.append(item)
        return language_table

    def translate(self,text,language):
        try:
            t=google_translator().translate(text,language)
            return t
        except:
            return False
lan_table='''
'自动选择': 'auto'
'南非荷兰语': 'af'
'阿尔巴尼亚语': 'sq'
'阿姆哈拉语': 'am'
'阿拉伯语': 'ar'
'亚美尼亚语': 'hy'
'阿塞拜疆语': 'az'
'巴斯克语': 'eu'
'白俄罗斯语': 'be'
'孟加拉语': 'bn'
'波斯尼亚语': 'bs'
'保加利亚语': 'bg'
'加泰罗尼亚语': 'ca'
'宿务语': 'ceb'
'中文(简体)': 'zh'
'中文(繁体)': 'zh-TW'
'科西嘉语': 'co'
'克罗地亚语': 'hr'
'捷克语': 'cs'
'丹麦语': 'da'
'荷兰语': 'nl'
'英语': 'en'
'世界语': 'eo'
'爱沙尼亚语': 'et'
'芬兰语': 'fi'
'法语': 'fr'
'弗里西语': 'fy'
'加利西亚语': 'gl'
'格鲁吉亚语': 'ka'
'德语': 'de'
'希腊语': 'el'
'古吉拉特语': 'gu'
'海地克里奥尔语': 'ht'
'豪萨语': 'ha'
'夏威夷语': 'haw'
'希伯来语': 'he'
'印地语': 'hi'
'苗语': 'hmn'
'匈牙利语': 'hu'
'冰岛语': 'is'
'伊博语': 'ig'
'印尼语': 'id'
'爱尔兰语': 'ga'
'意大利语': 'it'
'日语': 'ja'
'爪哇语': 'jw'
'卡纳达语': 'kn'
'哈萨克语': 'kk'
'高棉语': 'km'
'韩语': 'ko'
'库尔德语': 'ku'
'吉尔吉斯语': 'ky'
'老挝语': 'lo'
'拉丁语': 'la'
'拉脱维亚语': 'lv'
'立陶宛语': 'lt'
'卢森堡语': 'lb'
'马其顿语': 'mk'
'马尔加什语': 'mg'
'马来语': 'ms'
'马拉雅拉姆语': 'ml'
'马耳他语': 'mt'
'毛利语': 'mi'
'马拉地语': 'mr'
'蒙古语': 'mn'
'缅甸语': 'my'
'尼泊尔语': 'ne'
'挪威语': 'no'
'尼杨扎语(齐切瓦语)': 'ny'
'普什图语': 'ps'
'波斯语': 'fa'
'波兰语': 'pl'
'葡萄牙语': 'pt'
'旁遮普语': 'pa'
'罗马尼亚语': 'ro'
'俄语': 'ru'
'萨摩亚语': 'sm'
'苏格兰盖尔语': 'gd'
'塞尔维亚语': 'sr'
'塞索托语': 'st'
'修纳语': 'sn'
'信德语': 'sd'
'僧伽罗语': 'si'
'斯洛伐克语': 'sk'
'斯洛文尼亚语': 'sl'
'索马里语': 'so'
'西班牙语': 'es'
'巽他语': 'su'
'斯瓦希里语': 'sw'
'瑞典语': 'sv'
'塔加洛语(菲律宾语)': 'tl'
'塔吉克语': 'tg'
'泰米尔语': 'ta'
'泰卢固语': 'te'
'泰语': 'th'
'土耳其语': 'tr'
'乌克兰语': 'uk'
'乌尔都语': 'ur'
'乌兹别克语': 'uz'
'越南语': 'vi'
'威尔士语': 'cy'
'班图语': 'xh'
'意第绪语': 'yi'
'约鲁巴语': 'yo'
'祖鲁语': 'zu'
'南非荷兰语': 'af'
'阿尔巴尼亚语': 'sq'
'阿姆哈拉语': 'am'
'阿拉伯语': 'ar'
'亚美尼亚语': 'hy'
'阿塞拜疆语': 'az'
'巴斯克语': 'eu'
'白俄罗斯语': 'be'
'孟加拉语': 'bn'
'波斯尼亚语': 'bs'
'保加利亚语': 'bg'
'加泰罗尼亚语': 'ca'
'宿务语': 'ceb'
'中文(简体)': 'zh'
'中文(繁体)': 'zh-TW'
'科西嘉语': 'co'
'克罗地亚语': 'hr'
'捷克语': 'cs'
'丹麦语': 'da'
'荷兰语': 'nl'
'英语': 'en'
'世界语': 'eo'
'爱沙尼亚语': 'et'
'芬兰语': 'fi'
'法语': 'fr'
'弗里西语': 'fy'
'加利西亚语': 'gl'
'格鲁吉亚语': 'ka'
'德语': 'de'
'希腊语': 'el'
'古吉拉特语': 'gu'
'海地克里奥尔语': 'ht'
'豪萨语': 'ha'
'夏威夷语': 'haw'
'希伯来语': 'he'
'印地语': 'hi'
'苗语': 'hmn'
'匈牙利语': 'hu'
'冰岛语': 'is'
'伊博语': 'ig'
'印尼语': 'id'
'爱尔兰语': 'ga'
'意大利语': 'it'
'日语': 'ja'
'爪哇语': 'jw'
'卡纳达语': 'kn'
'哈萨克语': 'kk'
'高棉语': 'km'
'韩语': 'ko'
'库尔德语': 'ku'
'吉尔吉斯语': 'ky'
'老挝语': 'lo'
'拉丁语': 'la'
'拉脱维亚语': 'lv'
'立陶宛语': 'lt'
'卢森堡语': 'lb'
'马其顿语': 'mk'
'马尔加什语': 'mg'
'马来语': 'ms'
'马拉雅拉姆语': 'ml'
'马耳他语': 'mt'
'毛利语': 'mi'
'马拉地语': 'mr'
'蒙古语': 'mn'
'缅甸语': 'my'
'尼泊尔语': 'ne'
'挪威语': 'no'
'尼杨扎语(齐切瓦语)': 'ny'
'普什图语': 'ps'
'波斯语': 'fa'
'波兰语': 'pl'
'葡萄牙语': 'pt'
'旁遮普语': 'pa'
'罗马尼亚语': 'ro'
'俄语': 'ru'
'萨摩亚语': 'sm'
'苏格兰盖尔语': 'gd'
'塞尔维亚语': 'sr'
'塞索托语': 'st'
'修纳语': 'sn'
'信德语': 'sd'
'僧伽罗语': 'si'
'斯洛伐克语': 'sk'
'斯洛文尼亚语': 'sl'
'索马里语': 'so'
'西班牙语': 'es'
'巽他语': 'su'
'斯瓦希里语': 'sw'
'瑞典语': 'sv'
'塔加洛语(菲律宾语)': 'tl'
'塔吉克语': 'tg'
'泰米尔语': 'ta'
'泰卢固语': 'te'
'泰语': 'th'
'土耳其语': 'tr'
'乌克兰语': 'uk'
'乌尔都语': 'ur'
'乌兹别克语': 'uz'
'越南语': 'vi'
'威尔士语': 'cy'
'班图语': 'xh'
'意第绪语': 'yi'
'约鲁巴语': 'yo'
'祖鲁语': 'zu'
'''

四.总结

本次依然使用Tkinter做了一款翻译器,但无论是界面还是功能都在上一版有了很大改进
1.支持txt文本文件导入翻译
2.使用Combobox记录当前目标语言
3.调用谷歌翻译接口,翻译准确
4.自动识别源语言类型
5.加入鼠标右键事件,粘贴更方便
GUI打包好放在了蓝奏云,欢迎各位交流讨论。

以上就是python 制作一个gui的翻译工具的详细内容,更多关于python gui翻译工具的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python结合百度语音识别实现实时翻译软件的实现

    一.所需库安装 pip install PyAudio pip install SpeechRecognition pip install baidu-aip pip install Wave pip install Wheel pip install Pyinstaller 二.百度官网申请服务 三.源代码分享 import pyaudio import wave from aip import AipSpeech import time # 用Pyaudio库录制音频 # out_file:

  • Python爬虫制作翻译程序的示例代码

    上篇文章给大家介绍了Python爬虫实现百度翻译功能过程详解 Python爬虫学习之翻译小程序  感兴趣的朋友点击查看. 今天给大家介绍Python爬虫制作翻译程序的方法,具体内容如下所示: 此处我爬的是百度翻译,打开百度翻译的页面 我们要爬的是sug,爬它的响应信息 程序如下 import json import requests if __name__ == "__main__": url = "https://fanyi.baidu.com/sug" head

  • Python 制作自动化翻译工具

    妈妈再也不用担心我的英语了. 一个可能你似曾相识的场景 阅读内容包含大量英文的 PPT.Word.Excel 或者记事本时,由于英语不熟悉,为了流利地阅读,需要打开浏览器进入谷歌翻译的主界面,然后把英文复制到谷歌翻译的输入框中,最后又把翻译结果复制回 PPT.Word 和 Excel. 要是一个两个单词还好,要是发现有 100 个单词不认识,就必须复制粘贴 200 次,如此机械性重复性的工作,应该交给程序来做,这就是我设计下面这个自动化翻译工具的初衷. 提升办公效率的法宝 如上图,运行程序并保持

  • python 爬虫如何实现百度翻译

    环境 python版本号 系统 游览器 python 3.7.2 win7 google chrome 关于本文 本文将会通过爬虫的方式实现简单的百度翻译.本文中的代码只供学习,不允许作为于商务作用.商务作用请前往api.fanyi.baidu.com购买付费的api.若有侵犯,立即删文! 实现思路 在网站文件中找到隐藏的免费api.传入api所需要的参数并对其发出请求.在返回的json结果里找到相应的翻译结果. 百度翻译的反爬机制 由js算法生成的sign cookie检测 token暗号 在

  • python中翻译功能translate模块实现方法

    现如今,各个国家交流密切,通过翻译使我们打破了语言壁垒,而翻译在互联网上的存在也尤为普遍.python中执行翻译操作的包是translate包,通过下载安装translate包,使用translate模块可以在python中实现多种语言直接的相互翻译. 1.下载translate包 https://pypi.org/project/translate/ 2.使用pip安装translate包 pip install translate 3.使用translate模块实现翻译功能 from tra

  • python 调用Google翻译接口的方法

    一.网页分析 打开谷歌翻译链接:https://translate.google.com/ 按F12,点击network.在左侧输入"who are you" 可以看到,请求的链接为: https://translate.google.com/_/TranslateWebserverUi/data/batchexecute?rpcids=MkEWBc&f.sid=-2609060161424095358&bl=boq_translate-webserver_202012

  • python爬虫之爬取百度翻译

    破解百度翻译 翻译是一件麻烦的事情,如果可以写一个爬虫程序直接爬取百度翻译的翻译结果就好了,可当我打开百度翻译的页面,输入要翻译的词时突然发现不管我要翻译什么,网址都没有任何变化,那么百度翻译要怎么爬取呢? 爬取百度翻译之前,我们先要明白百度翻译是怎么在不改变网址的情况下实现翻译的.百度做到这一点是用 AJAX 实现的,简单地说,AJAX的作用是在不重新加载网页的情况下进行局部的刷新. 了解了这一点,那么我们要怎么得到 AJAX 工作时请求的URL呢?老规矩,使用抓包工具. 爬虫步骤 在 "百度

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

    tkinter的功能是如此强大,竟然还能做翻译软件.当然是在线的,我发现有一个quicktranslate模块,可以提供在线翻译功能,相当于提供了一个翻译的接口,利用它就可以制作在线翻译软件了.下面是代码,分享给大家. 注意要首先 pip install quicktranslate #-*- coding:utf-8 -*- import tkinter as tk #使用Tkinter前需要先导入 from tkinter import messagebox,ttk import datet

  • python 实现有道翻译功能

    初期操作 ​打开有道翻译界面-F12-Network-在翻译框中输入'hello'-在Network下面发现名为'translate_o?smartresult......'返回翻译之后的数据 分析参数 把所有的Request Headers.params都写上尝试爬虫,可以得到结果. ​然后Request Headers中Headers.Host.Origin.Referer三项留下,Cookie一项经尝试只有 OUTFOX_SEARCH_USER_ID=-1927650476@223.97.

  • 详解python使用金山词霸的翻译功能(调试工具断点的使用)

    今天试着用python获取金山词霸的翻译功能,链接在这里: ICIBA传送门 打开之后,界面是这样的,还是比较干净的. 按F12,打开调试工具,选择Network,找到XHR 这里就是查看网络传输的内容.XHR就是不刷新页面的网络传输,就是常说的ajax(阿贾克斯,像是希腊神话里的名字--). 然后我们在翻译窗口写点儿内容,然后点翻译 看,左边的页面出现了翻译结果,右边调试窗口出现了两条数据传输. 两条?那我们选哪条呢?点开看看-- 哦,天哪~两条都是一样的,那我们随便选一条就可以了. 点一下,

  • python用tkinter实现一个gui的翻译工具

    #!/usr/bin/env python # -*- coding: utf-8 -*- from tkinter import * import hashlib import time import json import requests import random LOG_LINE_NUM = 0 class MY_GUI(): def __init__(self,init_window_name): self.init_window_name = init_window_name se

随机推荐