2017-01-19 3 views
0

Я использовал QT Designer, чтобы иметь два QLineEdit для ввода ввода от пользователя. После ввода пользователем значений, когда нажата кнопка Enter, мне нужны кнопки для передачи значений функции disk_angles.Чтобы отправить два аргумента функции одним нажатием кнопки

Как передать две строки функции через сигналы одним нажатием кнопки? Вот мой код

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

Я попытался передать кортежи в качестве входных данных для сигнала pass_arguments = SIGNAL((str,),(str,)) , но я получаю ошибку

  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

В PyQt5 рекомендуется использовать new style, кроме того вы отправляете 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

Спасибо, этот метод работает –

Смежные вопросы