2017-01-19 4 views
0

J'ai utilisé QT Designer pour avoir deux QLineEdit pour prendre l'entrée de l'utilisateur. Une fois que l'utilisateur a entré les valeurs, lorsque le bouton Entrée est cliqué, j'ai besoin des boutons pour transmettre les valeurs à la fonction disk_angles.Pour envoyer deux arguments à une fonction avec le clic d'un bouton

Comment passer deux chaînes à une fonction via des signaux en appuyant sur un bouton? Voici mon code

class Maindialog(QMainWindow,diskgui.Ui_MainWindow): 

    pass_arguments = SIGNAL((str,),(str,)) 

    def __init__(self,parent = None): 

     super(Maindialog,self).__init__(parent) 
     self.setupUi(self) 

     self.connect(self.Home,SIGNAL("clicked()"),self.home_commands) 
     self.connect(self.AutoFocus,SIGNAL("clicked()"),self.auto_focus) 

     self.Enter.clicked.connect(self.entervalues) 
     self.connect(self,SIGNAL("pass arguments"),self.Criterion_disk_angles) 

    def entervalues(self): 
     if self.RotationEdit.text() != "" and self.TiltEdit.text() != "": 
     self.RotationEdit = str(self.RotationEdit.text()) 
     self.TiltEdit = str(self.TiltEdit.text()) 
     self.pass_arguments.emit(self.RotationEdit,self.TiltEdit) 

    def disk_angles(self,rotation_angle, tilt_angle): 

J'ai essayé de passer tuples en entrée au signal pass_arguments = SIGNAL((str,),(str,)) mais je reçois l'erreur

  pass_arguments = SIGNAL((str,),(str,)) 
     TypeError: SIGNAL() takes exactly one argument (2 given) 
+1

Avez-vous lu l'erreur? 'SIGNAL' prend 1 argument, mais vous avez fourni 2 ... – Li357

+0

@Andrew Li Oui, mais je lis que vous pouvez passer deux arguments dans un signal si vous le passez comme un tuple. Mais je l'ai compris mal le –

+0

essayez avec pass_arguments = SIGNAL ((str, str)) – eyllanesc

Répondre

1

En PyQt5 il est recommandé d'utiliser le new style, en plus vous envoyez 2 tuples de lieu d'un, ici je montre un exemple d'implémentation correcte.

import sys 

from PyQt5.QtCore import QObject, pyqtSignal 
from PyQt5.QtWidgets import QApplication, QPushButton 


class Widget(QObject): 
    sig = pyqtSignal((str, str)) 

    def __init__(self, parent=None): 
     super(Widget, self).__init__(parent=parent) 
     self.sig.connect(self.printer) 

    def click(self): 
     self.sig.emit("hello", "bye") 

    def printer(self, text1, text2): 
     print(text1, text2) 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    w = QPushButton() 
    w1 = Widget() 
    w.clicked.connect(w1.click) 
    w.show() 
    sys.exit(app.exec_()) 
+0

Merci cette méthode fonctionne –