Pyqt4:带有关键字参数的pyqtSignal?

时间:2017-02-08 21:37:49

标签: python-2.7 qt4 pyqt4

在以下可执行代码中,我将传递一些关键字参数pyqtSignal()。没有关键字参数,它确实有效。好吧,我知道pyqtSignal()不支持关键字参数。所以我不得不承认我没有任何想法来解决这个问题。但我想避免实施细节。

一些建议或替代方案?

from sys import argv

from PyQt4.QtCore import Qt, pyqtSignal

from PyQt4.QtGui import QDialog, QApplication, QPushButton, \
     QFormLayout, QTextEdit 

class Form(QDialog):

    test_signal = pyqtSignal()

    def __init__(self, parent=None):
        QDialog.__init__(self, parent)

        self.test_signal.connect(self.print_it)

        self.init_ui()

    def init_ui(self):


        self.pushButton_pyqt_signal = QPushButton()
        self.pushButton_pyqt_signal.setText("pyqtSignal") 

        layout = QFormLayout()
        layout.addWidget(self.pushButton_pyqt_signal)

        self.setLayout(layout)
        self.setWindowTitle("Log In")

        self.pushButton_pyqt_signal.clicked.connect(lambda: self.test_signal.emit('normal argument', keyword_arg_second='Ok, second'))

    def print_it(self, argument, keyword_arg_first=None, keyword_arg_second=None):
        print "Do some with argument", argument
        print "Do some with first keyword:", keyword_arg_first
        print "Do some with second keyword", keyword_arg_second
        return

app = QApplication(argv)
form = Form()
form.show()
app.exec_()

更新#1

from sys import argv

from PyQt4.QtCore import Qt, pyqtSignal, QObject

from PyQt4.QtGui import QDialog, QApplication, QPushButton, \
     QFormLayout

class WorkClass(QObject):

    test_signal = pyqtSignal(object)

    def __init__(self, parent=None):
        QObject.__init__(self, parent)

    def run(self):
        self.test_signal.emit(self.test_signal.emit('normal argument', keyword_arg_second="Ok, second"))

class Form(QDialog):

    start_work_class_signal = pyqtSignal()

    def __init__(self, parent=None):
        QDialog.__init__(self, parent)

        self.init_ui()

    def init_ui(self):


        self.pushButton_pyqt_signal = QPushButton()
        self.pushButton_pyqt_signal.setText("pyqtSignal") 

        layout = QFormLayout()
        layout.addWidget(self.pushButton_pyqt_signal)

        self.setLayout(layout)
        self.setWindowTitle("Testing window")

        self.pushButton_pyqt_signal.clicked.connect(self.start_with_work)

    def print_it(self, argument, keyword_arg_first=None, keyword_arg_second=None):
        print "argument", argument
        print "See first:", keyword_arg_first
        print "See second", keyword_arg_second
        return

    def start_with_work(self):
        work_class = WorkClass()
        work_class.test_signal.connect(self.print_it)

        self.start_work_class_signal.connect(work_class.run)
        self.start_work_class_signal.emit()

app = QApplication(argv)
form = Form()
form.show()
app.exec_()

1 个答案:

答案 0 :(得分:0)