'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 |