Введение
В ходе статьи напишем GUI переводчик на языке программирования Python с использованием модуля tkinter.
Установка модуля googletrans
Для написания кода нам понадобится модуль googletrans. Потребуется установка определённой версии, иначе ничего работать не будет. Для установки нужно перейти в терминал или же командную строку, прописать pip install googletrans==3.1.0a0, нажать Enter и ждать установки.
Написание GUI переводчика
Импортируем tkinter, расширение ttk, и Translator из googletrans:
from tkinter import *
from tkinter import ttk
from googletrans import Translator
Создадим объект класса Tk(), укажем разрешение окна 500×350, заголовок «Переводчик», запретим возможность изменять разрешение окна, сделаем фон чёрным и создадим объект класса Translator:
from tkinter import *
from tkinter import ttk
from googletrans import Translator
root = Tk()
root.geometry('500x350')
root.title('Переводчик')
root.resizable(width=False, height=False)
root['bg'] = 'black'
translator = Translator()
root.mainloop()
Создадим словарь с нужными языками, в качестве примера укажем Русский, Английский и Французский:
from tkinter import *
from tkinter import ttk
from googletrans import Translator
root = Tk()
root.geometry('500x350')
root.title('Переводчик')
root.resizable(width=False, height=False)
root['bg'] = 'black'
translator = Translator()
languages = {'Русский': 'ru', 'Английский': 'en', 'Французский': 'fr'}
root.mainloop()
Добавим фрейм и растянем его по координате X. Также изменим веса столбцов на единицу:
from tkinter import *
from tkinter import ttk
from googletrans import Translator
root = Tk()
root.geometry('500x350')
root.title('Переводчик')
root.resizable(width=False, height=False)
root['bg'] = 'black'
translator = Translator()
languages = {'Русский': 'ru', 'Английский': 'en', 'Французский': 'fr'}
header_frame = Frame(root, bg='black')
header_frame.pack(fill=X)
header_frame.grid_columnconfigure(0, weight=1)
header_frame.grid_columnconfigure(1, weight=1)
header_frame.grid_columnconfigure(2, weight=1)
root.mainloop()
Создадим виджет Combobox(), в котором будут храниться значения из словаря languages. Укажем, что по стандарту будет показываться значение с индексом 0:
from tkinter import *
from tkinter import ttk
from googletrans import Translator
root = Tk()
root.geometry('500x350')
root.title('Переводчик')
root.resizable(width=False, height=False)
root['bg'] = 'black'
translator = Translator()
languages = {'Русский': 'ru', 'Английский': 'en', 'Французский': 'fr'}
header_frame = Frame(root, bg='black')
header_frame.pack(fill=X)
header_frame.grid_columnconfigure(0, weight=1)
header_frame.grid_columnconfigure(1, weight=1)
header_frame.grid_columnconfigure(2, weight=1)
comboOne = ttk.Combobox(header_frame,
values=[lang for lang in languages], state='readonly')
comboOne.current(0)
comboOne.grid(row=0, column=0)
root.mainloop()
Добавим виджет Label(), который будет служить в качестве стрелочки между языками. Создадим второй виджет Combobox(), в котором нужно будет выбирать язык на который будет производиться перевод:
from tkinter import *
from tkinter import ttk
from googletrans import Translator
root = Tk()
root.geometry('500x350')
root.title('Переводчик')
root.resizable(width=False, height=False)
root['bg'] = 'black'
translator = Translator()
languages = {'Русский': 'ru', 'Английский': 'en', 'Французский': 'fr'}
header_frame = Frame(root, bg='black')
header_frame.pack(fill=X)
header_frame.grid_columnconfigure(0, weight=1)
header_frame.grid_columnconfigure(1, weight=1)
header_frame.grid_columnconfigure(2, weight=1)
comboOne = ttk.Combobox(header_frame,
values=[lang for lang in languages], state='readonly')
comboOne.current(0)
comboOne.grid(row=0, column=0)
label = Label(header_frame, fg='white', bg='black', font='Arial 17 bold', text='->')
label.grid(row=0, column=1)
comboTwo = ttk.Combobox(header_frame,
values=[lang for lang in languages], state='readonly')
comboTwo.current(1)
comboTwo.grid(row=0, column=2)
root.mainloop()
Создадим два текстовых поля для ввода и кнопку, по нажатию на которую будет производиться перевод. В первое текстовое поле будет вводиться текст, который нужно перевести, а во второе выводиться перевод:
from tkinter import *
from tkinter import ttk
from googletrans import Translator
root = Tk()
root.geometry('500x350')
root.title('Переводчик')
root.resizable(width=False, height=False)
root['bg'] = 'black'
translator = Translator()
languages = {'Русский': 'ru', 'Английский': 'en', 'Французский': 'fr'}
header_frame = Frame(root, bg='black')
header_frame.pack(fill=X)
header_frame.grid_columnconfigure(0, weight=1)
header_frame.grid_columnconfigure(1, weight=1)
header_frame.grid_columnconfigure(2, weight=1)
comboOne = ttk.Combobox(header_frame,
values=[lang for lang in languages], state='readonly')
comboOne.current(0)
comboOne.grid(row=0, column=0)
label = Label(header_frame, fg='white', bg='black', font='Arial 17 bold', text='->')
label.grid(row=0, column=1)
comboTwo = ttk.Combobox(header_frame,
values=[lang for lang in languages], state='readonly')
comboTwo.current(1)
comboTwo.grid(row=0, column=2)
t_input = Text(root, width=35, height=5, font='Arial 12 bold')
t_input.pack(pady=20)
btn = Button(root, width=45, text='Перевести', command=translate)
btn.pack()
t_output = Text(root, width=35, height=5, font='Arial 12 bold')
t_output.pack(pady=20)
root.mainloop()
Осталось создать функцию, которая будет срабатывать после нажатия на кнопку. Назовём её translate(). Внутри функции будет находиться цикл, который проходится по ключам и значениям в словаре languages. В цикле будет условие, которое сверяет выбранный пользователем язык с ключом языка итерации, и если они совпадают, то введённый пользователем текст будет сохранён в переменную text, далее произведётся перевод и отобразится во втором текстовом поле:
from tkinter import *
from tkinter import ttk
from googletrans import Translator
def translate():
for language, suffix in languages.items():
if comboTwo.get() == language:
text = t_input.get('1.0', END)
translation = translator.translate(text, dest=suffix)
t_output.delete('1.0', END)
t_output.insert('1.0', translation.text)
root = Tk()
root.geometry('500x350')
root.title('Переводчик')
root.resizable(width=False, height=False)
root['bg'] = 'black'
translator = Translator()
languages = {'Русский': 'ru', 'Английский': 'en', 'Французский': 'fr'}
header_frame = Frame(root, bg='black')
header_frame.pack(fill=X)
header_frame.grid_columnconfigure(0, weight=1)
header_frame.grid_columnconfigure(1, weight=1)
header_frame.grid_columnconfigure(2, weight=1)
comboOne = ttk.Combobox(header_frame,
values=[lang for lang in languages], state='readonly')
comboOne.current(0)
comboOne.grid(row=0, column=0)
label = Label(header_frame, fg='white', bg='black', font='Arial 17 bold', text='->')
label.grid(row=0, column=1)
comboTwo = ttk.Combobox(header_frame,
values=[lang for lang in languages], state='readonly')
comboTwo.current(1)
comboTwo.grid(row=0, column=2)
t_input = Text(root, width=35, height=5, font='Arial 12 bold')
t_input.pack(pady=20)
btn = Button(root, width=45, text='Перевести', command=translate)
btn.pack()
t_output = Text(root, width=35, height=5, font='Arial 12 bold')
t_output.pack(pady=20)
root.mainloop()
Итоговый результат:
![](https://it-start.online/wp-content/uploads/2023/02/image.png)
Видеоурок
Заключение
В ходе статьи мы с Вами написали GUI Переводчик на языке программирования Python с использованием модуля tkinter. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂