您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何使用python制作一個(gè)gui界面的翻譯工具”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何使用python制作一個(gè)gui界面的翻譯工具”這篇文章吧。
除了Tkinter,還需要google_trans_new,沒(méi)有安裝這個(gè)庫(kù)的朋友,可以使用
pip install google_trans_new
安裝一下。
設(shè)計(jì)流程很簡(jiǎn)單,這里就直接貼代碼了
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進(jìn)行語(yǔ)言記錄 """ 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='復(fù)制翻譯內(nèi)容',command=lambda:self.thread_it(self.copy_t)) self.l2.config(text='翻譯結(jié)果',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='關(guān)于',menu=self.s3) self.s1.add_command(label='打開(kāi)文本文件',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='選擇語(yǔ)言',command=self.open_topleval) self.s2.add_command(label='清空內(nèi)容',command=self.clear_t) self.s2.add_command(label='復(fù)制結(jié)果',command=lambda:self.thread_it(self.copy_t)) self.s3.add_command(label='說(shuō)明',command=self.show_infos) self.l3_var=StringVar() self.l3.config(textvariable=self.l3_var,background='lightblue') self.l3_var.set('當(dāng)前[自動(dòng)選擇]目標(biāo)語(yǔ)言') 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]) #對(duì)當(dāng)前選中語(yǔ)言進(jìn)行記錄 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'當(dāng)前選擇 [{self.now_language}] 作為目標(biāo)語(yǔ)言') self.l3_var.set(f'選擇[{self.now_language}]作為目標(biāo)語(yǔ)言') self.now_lan=self.language_table[self.s_combobox.current()]['short'] self.select_lan_window.destroy() def open_txt(self): txt_path = askopenfilename(title='選擇一個(gè)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'翻譯完成...已[自動(dòng)選擇目標(biāo)語(yǔ)言]') else: self.l3_var.set('翻譯失敗,請(qǐng)檢查網(wǎng)絡(luò)!') self.l3.config(background='red') else: messagebox.showwarning('警告','請(qǐng)輸入內(nèi)容!') self.l3.config(background='red') self.l3_var.set('請(qǐng)輸入內(nèi)容') 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('復(fù)制成功!') def show_infos(self): messagebox.showinfo('說(shuō)明','作者:懷淰メ') def thread_it(self,func,*args): t=threading.Thread(target=func,args=args) t.setDaemon(True) t.start() if __name__ == '__main__': a=App()
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=''' '自動(dòng)選擇': 'auto' '南非荷蘭語(yǔ)': 'af' '阿爾巴尼亞語(yǔ)': 'sq' '阿姆哈拉語(yǔ)': 'am' '阿拉伯語(yǔ)': 'ar' '亞美尼亞語(yǔ)': 'hy' '阿塞拜疆語(yǔ)': 'az' '巴斯克語(yǔ)': 'eu' '白俄羅斯語(yǔ)': 'be' '孟加拉語(yǔ)': 'bn' '波斯尼亞語(yǔ)': 'bs' '保加利亞語(yǔ)': 'bg' '加泰羅尼亞語(yǔ)': 'ca' '宿務(wù)語(yǔ)': 'ceb' '中文(簡(jiǎn)體)': 'zh' '中文(繁體)': 'zh-TW' '科西嘉語(yǔ)': 'co' '克羅地亞語(yǔ)': 'hr' '捷克語(yǔ)': 'cs' '丹麥語(yǔ)': 'da' '荷蘭語(yǔ)': 'nl' '英語(yǔ)': 'en' '世界語(yǔ)': 'eo' '愛(ài)沙尼亞語(yǔ)': 'et' '芬蘭語(yǔ)': 'fi' '法語(yǔ)': 'fr' '弗里西語(yǔ)': 'fy' '加利西亞語(yǔ)': 'gl' '格魯吉亞語(yǔ)': 'ka' '德語(yǔ)': 'de' '希臘語(yǔ)': 'el' '古吉拉特語(yǔ)': 'gu' '海地克里奧爾語(yǔ)': 'ht' '豪薩語(yǔ)': 'ha' '夏威夷語(yǔ)': 'haw' '希伯來(lái)語(yǔ)': 'he' '印地語(yǔ)': 'hi' '苗語(yǔ)': 'hmn' '匈牙利語(yǔ)': 'hu' '冰島語(yǔ)': 'is' '伊博語(yǔ)': 'ig' '印尼語(yǔ)': 'id' '愛(ài)爾蘭語(yǔ)': 'ga' '意大利語(yǔ)': 'it' '日語(yǔ)': 'ja' '爪哇語(yǔ)': 'jw' '卡納達(dá)語(yǔ)': 'kn' '哈薩克語(yǔ)': 'kk' '高棉語(yǔ)': 'km' '韓語(yǔ)': 'ko' '庫(kù)爾德語(yǔ)': 'ku' '吉爾吉斯語(yǔ)': 'ky' '老撾語(yǔ)': 'lo' '拉丁語(yǔ)': 'la' '拉脫維亞語(yǔ)': 'lv' '立陶宛語(yǔ)': 'lt' '盧森堡語(yǔ)': 'lb' '馬其頓語(yǔ)': 'mk' '馬爾加什語(yǔ)': 'mg' '馬來(lái)語(yǔ)': 'ms' '馬拉雅拉姆語(yǔ)': 'ml' '馬耳他語(yǔ)': 'mt' '毛利語(yǔ)': 'mi' '馬拉地語(yǔ)': 'mr' '蒙古語(yǔ)': 'mn' '緬甸語(yǔ)': 'my' '尼泊爾語(yǔ)': 'ne' '挪威語(yǔ)': 'no' '尼楊扎語(yǔ)(齊切瓦語(yǔ))': 'ny' '普什圖語(yǔ)': 'ps' '波斯語(yǔ)': 'fa' '波蘭語(yǔ)': 'pl' '葡萄牙語(yǔ)': 'pt' '旁遮普語(yǔ)': 'pa' '羅馬尼亞語(yǔ)': 'ro' '俄語(yǔ)': 'ru' '薩摩亞語(yǔ)': 'sm' '蘇格蘭蓋爾語(yǔ)': 'gd' '塞爾維亞語(yǔ)': 'sr' '塞索托語(yǔ)': 'st' '修納語(yǔ)': 'sn' '信德語(yǔ)': 'sd' '僧伽羅語(yǔ)': 'si' '斯洛伐克語(yǔ)': 'sk' '斯洛文尼亞語(yǔ)': 'sl' '索馬里語(yǔ)': 'so' '西班牙語(yǔ)': 'es' '巽他語(yǔ)': 'su' '斯瓦希里語(yǔ)': 'sw' '瑞典語(yǔ)': 'sv' '塔加洛語(yǔ)(菲律賓語(yǔ))': 'tl' '塔吉克語(yǔ)': 'tg' '泰米爾語(yǔ)': 'ta' '泰盧固語(yǔ)': 'te' '泰語(yǔ)': 'th' '土耳其語(yǔ)': 'tr' '烏克蘭語(yǔ)': 'uk' '烏爾都語(yǔ)': 'ur' '烏茲別克語(yǔ)': 'uz' '越南語(yǔ)': 'vi' '威爾士語(yǔ)': 'cy' '班圖語(yǔ)': 'xh' '意第緒語(yǔ)': 'yi' '約魯巴語(yǔ)': 'yo' '祖魯語(yǔ)': 'zu' '南非荷蘭語(yǔ)': 'af' '阿爾巴尼亞語(yǔ)': 'sq' '阿姆哈拉語(yǔ)': 'am' '阿拉伯語(yǔ)': 'ar' '亞美尼亞語(yǔ)': 'hy' '阿塞拜疆語(yǔ)': 'az' '巴斯克語(yǔ)': 'eu' '白俄羅斯語(yǔ)': 'be' '孟加拉語(yǔ)': 'bn' '波斯尼亞語(yǔ)': 'bs' '保加利亞語(yǔ)': 'bg' '加泰羅尼亞語(yǔ)': 'ca' '宿務(wù)語(yǔ)': 'ceb' '中文(簡(jiǎn)體)': 'zh' '中文(繁體)': 'zh-TW' '科西嘉語(yǔ)': 'co' '克羅地亞語(yǔ)': 'hr' '捷克語(yǔ)': 'cs' '丹麥語(yǔ)': 'da' '荷蘭語(yǔ)': 'nl' '英語(yǔ)': 'en' '世界語(yǔ)': 'eo' '愛(ài)沙尼亞語(yǔ)': 'et' '芬蘭語(yǔ)': 'fi' '法語(yǔ)': 'fr' '弗里西語(yǔ)': 'fy' '加利西亞語(yǔ)': 'gl' '格魯吉亞語(yǔ)': 'ka' '德語(yǔ)': 'de' '希臘語(yǔ)': 'el' '古吉拉特語(yǔ)': 'gu' '海地克里奧爾語(yǔ)': 'ht' '豪薩語(yǔ)': 'ha' '夏威夷語(yǔ)': 'haw' '希伯來(lái)語(yǔ)': 'he' '印地語(yǔ)': 'hi' '苗語(yǔ)': 'hmn' '匈牙利語(yǔ)': 'hu' '冰島語(yǔ)': 'is' '伊博語(yǔ)': 'ig' '印尼語(yǔ)': 'id' '愛(ài)爾蘭語(yǔ)': 'ga' '意大利語(yǔ)': 'it' '日語(yǔ)': 'ja' '爪哇語(yǔ)': 'jw' '卡納達(dá)語(yǔ)': 'kn' '哈薩克語(yǔ)': 'kk' '高棉語(yǔ)': 'km' '韓語(yǔ)': 'ko' '庫(kù)爾德語(yǔ)': 'ku' '吉爾吉斯語(yǔ)': 'ky' '老撾語(yǔ)': 'lo' '拉丁語(yǔ)': 'la' '拉脫維亞語(yǔ)': 'lv' '立陶宛語(yǔ)': 'lt' '盧森堡語(yǔ)': 'lb' '馬其頓語(yǔ)': 'mk' '馬爾加什語(yǔ)': 'mg' '馬來(lái)語(yǔ)': 'ms' '馬拉雅拉姆語(yǔ)': 'ml' '馬耳他語(yǔ)': 'mt' '毛利語(yǔ)': 'mi' '馬拉地語(yǔ)': 'mr' '蒙古語(yǔ)': 'mn' '緬甸語(yǔ)': 'my' '尼泊爾語(yǔ)': 'ne' '挪威語(yǔ)': 'no' '尼楊扎語(yǔ)(齊切瓦語(yǔ))': 'ny' '普什圖語(yǔ)': 'ps' '波斯語(yǔ)': 'fa' '波蘭語(yǔ)': 'pl' '葡萄牙語(yǔ)': 'pt' '旁遮普語(yǔ)': 'pa' '羅馬尼亞語(yǔ)': 'ro' '俄語(yǔ)': 'ru' '薩摩亞語(yǔ)': 'sm' '蘇格蘭蓋爾語(yǔ)': 'gd' '塞爾維亞語(yǔ)': 'sr' '塞索托語(yǔ)': 'st' '修納語(yǔ)': 'sn' '信德語(yǔ)': 'sd' '僧伽羅語(yǔ)': 'si' '斯洛伐克語(yǔ)': 'sk' '斯洛文尼亞語(yǔ)': 'sl' '索馬里語(yǔ)': 'so' '西班牙語(yǔ)': 'es' '巽他語(yǔ)': 'su' '斯瓦希里語(yǔ)': 'sw' '瑞典語(yǔ)': 'sv' '塔加洛語(yǔ)(菲律賓語(yǔ))': 'tl' '塔吉克語(yǔ)': 'tg' '泰米爾語(yǔ)': 'ta' '泰盧固語(yǔ)': 'te' '泰語(yǔ)': 'th' '土耳其語(yǔ)': 'tr' '烏克蘭語(yǔ)': 'uk' '烏爾都語(yǔ)': 'ur' '烏茲別克語(yǔ)': 'uz' '越南語(yǔ)': 'vi' '威爾士語(yǔ)': 'cy' '班圖語(yǔ)': 'xh' '意第緒語(yǔ)': 'yi' '約魯巴語(yǔ)': 'yo' '祖魯語(yǔ)': 'zu' '''
以上是“如何使用python制作一個(gè)gui界面的翻譯工具”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。