GUI Переводчик на Python tkinter

Статьи

Введение

В ходе статьи напишем 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()

Итоговый результат:

GUI Переводчик на Python tkinter

Видеоурок

GUI Переводчик на Python tkinter v2

Заключение

В ходе статьи мы с Вами написали GUI Переводчик на языке программирования Python с использованием модуля tkinter. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

Admin
Admin
IT Start