0

I make a translator app using tkinter and googletrans

but when i run it, the googletrans only return 1 word here is my full code (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()

the main.py returns

H

when i type "Hai". in the inp widget

but in the other code file (trans_test.py) it returns the right translated word here is trans_test.py full code

#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"))

the trans_test.py returns

Hi

Thank you if someone answer this :)

1

1 Answer 1

1

The reason why you getting only h is that your translate function is trying to translate h which is h. At line ans = inp.get(1.0), you are just getting the character at row 1 and col 0 aka 1.0, you need to get the complete text which can be done by doing ans = inp.get(1.0, 'end').

Also, I want to address trans_txt.delete(END, "end") if you are trying to delete the text completely then you need to delete from staring index to the end index so it should be.

trans_txt.delete(1.0, "end")

Both END or "end" are the same values don't get confused.

Also if you are trying to make the 2nd Text widget a read-only Text then you just need to disable the state after inserting.

Improved translate function

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")
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.