python gui 인터페이스 번역 도구 만 들 기
Tkinter 말고 googletrans_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 번역 도구 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.