2017-01-19 2 views
0

QT 디자이너를 사용하여 두 개의 QLineEdit을 사용하여 사용자로부터 입력을받습니다. 사용자가 값을 입력 한 후에 Enter 버튼을 클릭하면 버튼이 disk_angles 함수에 값을 전달해야합니다.버튼을 클릭하여 두 개의 인수를 함수에 보내려면

버튼을 눌러 신호를 통해 두 개의 문자열을 함수에 전달하는 방법은 무엇입니까? 는 여기에 내가 신호 pass_arguments = SIGNAL((str,),(str,)) 에 입력으로 튜플을 전달하는 시도

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): 

내 코드 그러나 나는 또한, new style를 사용하는 것이 좋습니다

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

오류를 읽고 계하십니까? 'SIGNAL'은 1 개의 인수를 가졌지 만 2를 제공했습니다 ... – Li357

+0

@Andrew Li 네, 그렇습니다. 튜플로 넘겨 주면 두 개의 인수를 신호로 전달할 수 있다고 읽었습니다. 하지만 난 그걸 잘못 이해했습니다. –

+0

시도 pass_arguments = SIGNAL ((str, str)) – eyllanesc

답변

1

오류를 얻을 당신은 하나의 장소의 2 개의 튜플을 보내고 있습니다, 여기서 나는 올바른 구현의 예를 보여줍니다.

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

고마워이 방법은 작동합니다. –