2017-10-11 12 views
0

Je suis en train de rediriger "sys.stdout" à QTextEdit, voici mon code:PyQt5 - TypeError: signal a 0 argument (s) mais 1 à condition

class Communicate(QObject): 
    printText = pyqtSignal() 
    def write(self, text): 
     self.printText.emit(str(text)) 

class UI(QWidget): 
    def __init__(self, parent = None): 
     QWidget.__init__(self) 
     ... 
     self.textedit = QTextEdit(self) 
     self.textedit.setGeometry(400,20,220,300) 
     self.c = Communicate() 
     self.c.printText.connect(self.textedit.insertPlainText) 
     sys.stdout = self.c 


if __name__ == "__main__": 
    ... 

Quand je courais le code, je suis TypeError: Communicate.printText[] signal has 0 argument(s) but 1 provided. Mais quand j'ai essayé de fournir aucun argument à self.printText.emit(), il a dit que self.textedit.insertPlainText a besoin de 1 argument. Ai-je manqué quelque chose? Votre réponse sera appréciée.

Répondre

0

Vous devez spécifier les paramètres lors de la définition du signal. En outre, vous devez probablement fournir une méthode factice flush pour éviter les erreurs d'attribut:

class Communicate(QObject): 
    printText = pyqtSignal(str) 

    def write(self, text): 
     self.printText.emit(text) 

    def flush(self): 
     pass