如何使用python制作一个gui界面的翻译工具
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章主要为大家展示了"如何使用python制作一个gui界面的翻译工具",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用python制作一个gui
千家信息网最后更新 2025年02月19日如何使用python制作一个gui界面的翻译工具一.准备工作
这篇文章主要为大家展示了"如何使用python制作一个gui界面的翻译工具",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用python制作一个gui界面的翻译工具"这篇文章吧。
一.准备工作
除了Tkinter,还需要google_trans_new,没有安装这个库的朋友,可以使用
pip install google_trans_new
安装一下。
二.源代码
设计流程很简单,这里就直接贴代码了
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('',self.escape) self.t1.bind(' ',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(' ',self.paste) self.menubar2 = Menu(self.t2,tearoff=False) self.menubar2.add_command(label="粘贴", command=self.do_paste2) self.t2.bind(' ',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''''
以上是"如何使用python制作一个gui界面的翻译工具"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
选择
内容
语言
尼亚
波斯
荷兰
兰语
德语
荷兰语
克里奥
塞尔
库尔
盖尔
萨摩
乌兹别克
斯瓦希
波斯尼亚
泰米尔
科西嘉
索马里
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云服务器有挖矿程序
大专联校网络安全竞赛2017
db2查看所有数据库实例
服务器维修图片
软件开发前期要准备的文档
网络安全运维小工具
南京信息软件开发优势
软件开发 人均产值
数据库关系图设计软件
网络安全挑战有哪些
保定创恒信网络技术
兴宁软件开发app公司
软件开发项目大学生策划书
计算机网络技术基础阚宝朋主编
怀旧服部落服务器怎么扩容
人民警察招录网络安全专业测试
华硕电脑进网络安全模式进不去
r和t的计算数据库
水质数据库表结构及标识符
服务器加密文件找不到
江西哪个专科软件开发专业好
怎么代理网站服务器
专注脚本软件开发公司
数据库链接本质
网络技术和弱电
网络安全法规定未成年人
禾匠换服务器后提示站点有停止
不属于网络安全基础是
软件开发公司无锡
服务器的数据如何解析