Python googletrans возвращает только одно слово - PullRequest
0 голосов
/ 02 августа 2020

Я делаю приложение-переводчик, используя tkinter и googletrans

, но когда я его запускаю, googletrans возвращает только 1 слово, вот мой полный код (main.py)

#Importing modules
from tkinter import *
from googletrans import Translator

##Main Script
#Main Window
Window = Tk()
Window.geometry("400x700")
Window.resizable(False, False)
Window.configure(bg="#e1f4f3")

#Defs
def translate():
    ans = inp.get(1.0)
    trans = Translator()
    t = trans.translate(
        ans, src="id", dest="en"
    )

    trans_txt.config(state="normal")
    trans_txt.delete(END, "end")
    trans_txt.insert(END, t.text)
    trans_txt.config(state="normal")

#Widgets
#main frame
main = Frame(Window, width=300, height=500, bg="#00d1ff", bd=0, highlightthickness=0)

#entries
#input user
inp = Text(main, bd=0, highlightthickness=0, font=("Gotham Book", 20))
inp.pack_propagate(0)

#translate btn
translate_btn = Button(main, bd=0, highlightthickness=0, font=("Gotham Book", 20), text="Translate", command=translate)
translate_btn.configure(highlightbackground="light blue")
translate_btn.pack_propagate(0)

#translation
trans_txt = Text(main, bd=0, highlightthickness=0, font=("Gotham Book", 20))
trans_txt.config(state="disabled")
trans_txt.pack_propagate(0)

#Packs
main.place(anchor="c", rely=.5, relx=.5)

inp.place(x=150, anchor="c", y=100, height=90, width=250)
translate_btn.place(x=150, anchor="c", y=250)
trans_txt.place(x=150, anchor="c", y=400, height=90, width=250)

#Window.mainloop()
Window.mainloop()

main.py возвращает

H

, когда я набираю «Hai». в виджете inp

, но в другом файле кода (trans_test.py) он возвращает правильно переведенное слово, здесь trans_test.py полный код

#Importing modules
from googletrans import Translator

#trans()
def trans(text):
    trans = Translator()
    t = trans.translate(
        text, src="id", dest="en"
    )
    return t.text

#test
print(trans("Hai"))

trans_test.py возвращает

Hi

Спасибо, если кто на это ответит :)

1 Ответ

1 голос
/ 02 августа 2020

Причина, по которой вы получаете только h, заключается в том, что ваша функция translate пытается перевести h, что равно h. В строке ans = inp.get(1.0) вы просто получаете символ в строке 1 и столбце 0, он же 1.0, вам нужно получить полный текст, который можно сделать, выполнив ans = inp.get(1.0, 'end').

Кроме того, я хочу по адресу trans_txt.delete(END, "end"), если вы пытаетесь полностью удалить текст, вам нужно удалить его из начального индекса до конечного индекса , так и должно быть.

trans_txt.delete(1.0, "end")

Оба END или "end" - одинаковые значения, не путайте.

Также, если вы пытаетесь сделать виджет 2nd Text текстовым только для чтения, вам просто нужно отключить состояние после вставки.

Улучшено translate функция

def translate():
    ans = inp.get(1.0, 'end')
    trans = Translator()
    t = trans.translate(ans, src="id", dest="en")
    trans_txt.config(state="normal")
    trans_txt.delete(1.0, "end")
    trans_txt.insert(END, t.text)
    trans_txt.config(state="disabled")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...