您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python 制作一个gui界面的翻译工具

51自学网 2021-10-30 22:40:26
  python
这篇教程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 messageboxfrom tkinter import ttkimport pyperclipimport threadingfrom tkinter.filedialog import askopenfilenamefrom 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_translatorimport reclass 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 Falselan_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翻译工具的资料请关注51zixue.net其它相关文章!


pyqt5打包成exe可执行文件的方法
Python中zipfile压缩包模块的使用
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。