我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

目录
  • 一.准备工作
  • 二.预览
    • 1.主界面
    • 2.翻译
    • 3.支持多种语言哦
  • 三.源代码
    • 3.1 My_Translator-v2.0.py
    • 3.2 Translator.py
  • 四.总结

    一.准备工作

    除了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('说明','作者:??Vメ')
    
        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翻译工具的资料请关注编程网其它相关文章!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

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

    目录一.准备工作二.预览1.主界面2.翻译3.支持多种语言哦三.源代码3.1 My_Translator-v2.0.py3.2 Translator.py四.总结一.准备工作除了Tkinter,还需要google_trans_new,没有安
    2022-06-02

    python制作的天气预报小工具(gui界面)

    目录一.准备工作二.预览1.启动2.添加城市3.展示多个城市天气三.设计流程1.获取城市天气信息过程四.源代码1.Weather_Tool-v1.0.py2.Weather_Spider.py五.总结一.准备工作不需要准备。 二.预览1.启
    2022-06-02

    Python 制作自动化翻译工具

    妈妈再也不用担心我的英语了。 一个可能你似曾相识的场景阅读内容包含大量英文的 PPT、Word、Excel 或者记事本时,由于英语不熟悉,为了流利地阅读,需要打开浏览器进入谷歌翻译的主界面,然后把英文复制到谷歌翻译的输入框中,最后又把翻译结
    2022-06-02

    如何使用Python3制作一个带GUI界面的小说爬虫工具

    这篇文章主要介绍如何使用Python3制作一个带GUI界面的小说爬虫工具,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图最近帮朋友写个简单爬虫,顺便整理了下,搞成了一个带GUI界面的小说爬虫工具,用来从笔趣阁爬取
    2023-06-29

    java制作带界面的聊天工具

    本文实例为大家分享了java聊天工具的具体制作代码,供大家参考,具体内容如下首先建立一个工程,导入数据库驱动工程图解释一下 entity包是 bin目录 Message包下 和 User包下 是对象相关的操作Message package
    2023-05-31

    关于Python制作简单的图形界面GUI

    #简单的图形界面GUI(Graphical User Interface)from tkinter import *import tkinter.messagebox as messageboxclass Application(Frame
    2023-01-31

    怎么在Python中使用Tkinter制作一个翻译软件

    本篇文章为大家展示了怎么在Python中使用Tkinter制作一个翻译软件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和
    2023-06-06

    怎么用PyQT5制作一个桌面摸鱼工具

    这篇文章主要介绍“怎么用PyQT5制作一个桌面摸鱼工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用PyQT5制作一个桌面摸鱼工具”文章能帮助大家解决问题。按键功能控制q 退出B 书签功能F
    2023-06-29

    使用html和css怎么制作一个可翻转登录注册界面

    这期内容当中小编将会给大家带来有关使用html和css怎么制作一个可翻转登录注册界面,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Html
    2023-06-08

    Python制作一个随机抽奖小工具的实现

    目录1. 核心功能设计2. GUI设计与实现3. 功能实现3.1 读取人员名单3.2. 随机抽奖3.3. 保存中奖名单3.4. GUI交互逻辑最近在工作中面向社群玩家组织了一场活动,需要进行随机抽奖,参考之前小明大佬的案例,再结合自己的需求
    2022-06-02

    如何使用Python制作一个多进制转换工具

    小编给大家分享一下如何使用Python制作一个多进制转换工具,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言学习资料下载链接 提取码:tha8 进制转换计算工
    2023-06-29

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录