'Make a Translate of multiples words

I’m trying to make a translator who translates phrases and texts from German to Portuguese

The code takes the information in the ´´´QLineEdit´´´ and translates it by pasting the translation into the ´´´QlistWidget´´´. However the code only translates one word at a time, since it does not recognize the spacebar. How can I make the program to translate a sentence?

from PyQt5 import uic, QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThread, QUrl
from PyQt5.QtWidgets import *
from translate import Translator
import sys


class Tradutor(QWidget):
    def __init__(self):
        super().__init__()
        self.inputLanguage = QLineEdit()
        self.inputLanguage.setStyleSheet("background-color: white;")
        self.listWidget = QListWidget(self)
        self.listWidget.setStyleSheet("font : 10pt ; background-color: white;")

        self.btnTraduzir = QPushButton('Traduzir', self)
        self.btnTraduzir.setStyleSheet("background-color: none;")
        self.btnTraduzir.clicked.connect(self.Translate)
        self.imputLanguageLabel = QLabel("Escreva o Texto a ser traduzido ", self)
        self.resize(562, 605)

        LanguageChoices = {'Portuguese','English','French','German','Spanish'}

        layout = QGridLayout()
        layout.addWidget(self.inputLanguage,2,0,1,1)
        layout.addWidget(self.btnTraduzir,2,1,1,1)
        layout.addWidget(self.imputLanguageLabel,1,0,1,1)
        layout.addWidget(self.listWidget,5,0,1,2)
        self.setLayout(layout)


    def Translate(self):
        translator = Translator(from_lang= "german",to_lang="portuguese")
        Translation = translator.translate(self.inputLanguage.text())
        self.listWidget.addItem(Translation)



if __name__ == '__main__':
    app = QApplication([])
    main = Tradutor()
    main.show()
    sys.exit(app.exec_())


Solution 1:[1]

You have to run the translation on a different thread:

class WorkerTranslator(QObject):
    translateSignal = pyqtSignal(str)

    def translate(self, text, from_lang, to_lang):
        threading.Thread(
            target=self._translate, args=(text, from_lang, to_lang), daemon=True
        ).start()

    def _translate(self, text, from_lang, to_lang):
        translator = Translator(from_lang=from_lang, to_lang=to_lang)
        translated = translator.translate(text)
        self.translateSignal.emit(translated)

class Tradutor(QWidget):
    def __init__(self):
        super().__init__()
        self.inputLanguage = QLineEdit()
        self.inputLanguage.setStyleSheet("background-color: white;")
        self.listWidget = QListWidget(self)
        self.listWidget.setStyleSheet("font : 10pt ; background-color: white;")

        self.btnTraduzir = QPushButton('Traduzir', self)
        self.btnTraduzir.setStyleSheet("background-color: none;")
        self.btnTraduzir.clicked.connect(self.handle_clicked)
        self.imputLanguageLabel = QLabel("Escreva o Texto a ser traduzido ", self)
        self.resize(562, 605)

        layout = QGridLayout(self)
        layout.addWidget(self.inputLanguage,2,0,1,1)
        layout.addWidget(self.btnTraduzir,2,1,1,1)
        layout.addWidget(self.imputLanguageLabel,1,0,1,1)
        layout.addWidget(self.listWidget,5,0,1,2)

        self.translator = WorkerTranslator()
        self.translator.translateSignal.connect(self.listWidget.addItem)

    def handle_clicked(self):
        text = self.inputLanguage.text()
        self.translator.translate(text, "german", "portuguese")

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 eyllanesc