Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 파이썬배열
- 바텀네비게이션
- bottomnavigation
- androidstudio
- int크기
- 안드로이드
- 정보처리산업기사
- 엑티비티
- 정처기운영체제
- 자바연산자
- 코딩공부
- 자바
- 파이썬예제
- 파이썬리스트
- 정처기
- 안드로이드스튜디오
- 파이썬공부
- 자바예제
- 운영체제종류
- 파이썬
- 파이썬배열예제
- 백준
- 데이터베이스
- 스누핑
- 업다운게임코드
- 운영체제목적
- 정처산기
- java
- 컴퓨터일반
- 코딩
Archives
- Today
- Total
발전을 위한 기록
[Python] 파이썬을 이용한 번역기 만들기 GUI 본문
728x90

필요한 라이브러리
작성한 프로그램에서는 두 가지 주요 라이브러리를 사용합니다.
- tkinter : GUI를 구현하기 위한 Python의 표준 라이브러리
- googletrans : Google Translate API를 이용해 텍스트를 번역하는 라이브러리
📌tkinter라이브러리는 파이썬에 기본적으로 포함되어 있지만, googletrans는 별도 설치가 필요합니다.
아래 명령어로 설치할 수 있습니다.
pip install googletrans==4.0.0-rc1
전체 코드
from tkinter import Tk, Label, Text, Button, END, messagebox, StringVar
from tkinter.ttk import Combobox
from googletrans import Translator, LANGUAGES
# 번역기 생성
translator = Translator()
# LANGUAGES를 한국어로 번역 (직접 작성한 한국어 매핑)
LANGUAGE_KR_MAPPING = {
"auto":"자동선택",
"en": "영어",
"ko": "한국어",
"ja": "일본어",
"fr": "프랑스어",
"de": "독일어",
"zh-cn": "중국어(간체)",
"zh-tw": "중국어(번체)",
"es": "스페인어",
"ru": "러시아어",
# 필요한 언어를 계속 추가
}
# LANGUAGE_KR_MAPPING 값:키 반전
LANGUAGE_NAMES_KR = {v: k for k, v in LANGUAGE_KR_MAPPING.items()}
def translate_text():
try:
# 원본 텍스트와 선택된 언어 가져오기
source_text = text_input.get("1.0", END).strip()
if not source_text:
messagebox.showwarning("경고", "번역할 내용을 입력해주세요.")
return
# 사용자 선택 언어를 코드로 변환
source_lang = LANGUAGE_NAMES_KR[source_lang_var.get()]
target_lang = LANGUAGE_NAMES_KR[target_lang_var.get()]
# 번역 실행
translated = translator.translate(source_text, src=source_lang, dest=target_lang)
text_output.delete("1.0", END)
text_output.insert(END, translated.text)
except Exception as e:
messagebox.showerror("오류", f"번역 중 문제가 발생했습니다: {e}")
# GUI 설정
root = Tk()
root.title("번역기")
root.geometry("500x600")
# 언어 선택 옵션
language_list = list(LANGUAGE_KR_MAPPING.values()) # 한국어로 번역된 언어 목록
# 원본 언어 선택
Label(root, text="원본 언어 선택:").pack()
source_lang_var = StringVar()
source_lang_var.set("자동선택") # 기본값: 자동선택
source_lang_combo = Combobox(root, textvariable=source_lang_var, values=["자동선택"] + language_list, state="readonly", height=5)
source_lang_combo.pack()
# 대상 언어 선택
Label(root, text="대상 언어 선택:").pack()
target_lang_var = StringVar()
target_lang_var.set("한국어") # 기본값: 한국어
target_lang_combo = Combobox(root, textvariable=target_lang_var, values=language_list, state="readonly", height=5)
target_lang_combo.pack()
# 원본 텍스트 입력
Label(root, text="번역할 텍스트:").pack()
text_input = Text(root, height=10, width=50)
text_input.pack()
# 번역 결과 출력
Label(root, text="번역 결과:").pack()
text_output = Text(root, height=10, width=50)
text_output.pack()
# 번역 버튼
Button(root, text="번역하기", command=translate_text).pack()
root.mainloop()
코드 설명
1. 라이브러리 임포트💻
from tkinter import Tk, Label, Text, Button, END, messagebox, StringVar
from tkinter.ttk import Combobox
from googletrans import Translator, LANGUAGES
- Tkinter : Tk, Label, Text, Button, END, massagebox, StrinVar는 GUI위젯을 구성하고 메시지를 표시하기 위한 클래스입니다.
- Combobox : 드롭다운 메뉴를 만들 때 사용되는 위젯입니다.
- googletrans : Translator 클래스는 텍스트를 번역하는 기능을 제공합니다.
2. 언어 매핑💻
LANGUAGE_KR_MAPPING = {
"auto": "자동선택",
"en": "영어",
"ko": "한국어",
"ja": "일본어",
"fr": "프랑스어",
"de": "독일어",
"zh-cn": "중국어(간체)",
"zh-tw": "중국어(번체)",
"es": "스페인어",
"ru": "러시아어",
}
- google translate의 언어 코드는 영어 코드로 되어 있습니다.
- 사용자에게 친숙한 한국어 이름을 표시하기 위해 한국어 이름을 매핑하는 딕셔너리를 만듭니다.
LANGUAGE_NAMES_KR = {v: k for k, v in LANGUAGE_KR_MAPPING.items()}
- Google Translate에서는 영어 코드를 사용하기 때문에 선택된 언어의 이름을 다시 영어로 변환하는 반전 딕셔너리를 만듭니다.
- en -> 영어 -> en
3. 번역 함수💻
def translate_text():
try:
# 원본 텍스트와 선택된 언어 가져오기
source_text = text_input.get("1.0", END).strip() # 텍스트 박스에서 입력값 가져오기
if not source_text:
messagebox.showwarning("경고", "번역할 내용을 입력해주세요.")
return
# 사용자 선택 언어를 코드로 변환
source_lang = LANGUAGE_NAMES_KR[source_lang_var.get()]
target_lang = LANGUAGE_NAMES_KR[target_lang_var.get()]
# 번역 실행
translated = translator.translate(source_text, src=source_lang, dest=target_lang)
text_output.delete("1.0", END) # 번역 결과를 출력 창에 지우기
text_output.insert(END, translated.text) # 번역된 텍스트 삽입
except Exception as e:
messagebox.showerror("오류", f"번역 중 문제가 발생했습니다: {e}")
- 번역을 실제로 수행하는 함수입니다.
- text_input.get("1.0", END)를 통해 입력한 텍스트를 가져옵니다. 여기서 "1.0"은 첫 번째 줄의 첫 번째 문자, "END"는 마지막 문자입니다.
- LANGUAGE_NAMES_KR 딕셔너리를 이용해 사용자가 선택한 언어를 Google Translate에서 사용할 수 있는 코드로 변환합니다.
- translator.translate 메서드를 호출하여 텍스트를 번역합니다.
- text_output.delete로 기존 결과를 지우고, 번역된 텍스트를 text_output.insert로 출력합니다.
4. GUI 구성💻
root = Tk() #윈도우 생성
root.title("번역기") #윈도우 제목 설정
root.geometry("500x600") #윈도우 크기 설정
# 원본 언어 선택 콤보박스
Label(root, text="원본 언어 선택:").pack() # 원본 언어 라벨
source_lang_var = StringVar() # 원본 언어 변수
source_lang_var.set("자동선택") # 기본값 설정
source_lang_combo = Combobox(root, textvariable=source_lang_var, values=["자동선택"] + language_list, state="readonly", height=5)
source_lang_combo.pack() # 콤보박스 배치
# 대상 언어 선택 콤보박스
Label(root, text="대상 언어 선택:").pack() # 대상 언어 라벨
target_lang_var = StringVar() # 대상 언어 변수
target_lang_var.set("한국어") # 기본값 설정
target_lang_combo = Combobox(root, textvariable=target_lang_var, values=language_list, state="readonly", height=5)
target_lang_combo.pack() # 콤보박스 배치
# 번역할 텍스트 입력
Label(root, text="번역할 텍스트:").pack() # 텍스트 입력 라벨
text_input = Text(root, height=10, width=50) # 텍스트 입력창
text_input.pack() # 텍스트 입력창 배치
# 번역 결과 출력
Label(root, text="번역 결과:").pack() # 번역 결과 라벨
text_output = Text(root, height=10, width=50) # 번역 결과 출력창
text_output.pack() # 출력창 배치
# 번역 버튼
Button(root, text="번역하기", command=translate_text).pack() # 버튼 클릭 시 translate_text 함수 실행
5. 프로그램 실행💻
root.mainloop()
- Tkinter 이벤트 루프를 시작하여 GUI를 동작하게 만듭니다.
실행 결과
새로운 윈도우 창이 열립니다.



728x90
'프로그래밍 > 파이썬' 카테고리의 다른 글
[Python] 파이썬 주석 사용법 (한 줄, 여러 줄) (0) | 2024.05.05 |
---|---|
[Python] 파이썬으로 시간, 분, 초 변환하기 (0) | 2024.04.02 |
[Python] 파이썬으로 만든 간단한 숫자 게임 (0) | 2024.02.02 |
[Python] 파이썬으로 달력 만들기4 - <메모 검색> (0) | 2024.01.29 |
[Python] 파이썬으로 달력 만들기3 - <메모 저장> (1) | 2024.01.28 |