ich weiß, dass pyqtSignal() keine Schlüsselargumente (keyword arguments) zulässt - warum auch immer. In meinen ausführbaren Beispiel-Quelltext habe ich mal versucht zu simulieren, worauf ich hinaus möchte. Ich habe hier eine print_it()-Methode, die neben dem normalen Argument auch zwei Schlüsselargumente entgegen nimmt. Die Sache ist nun folgendes: an mehreren Stellen im Programm wird diese Methode benutzt. Sehen wir mal an dieser Stelle darüber hinweg, dass die Schlüsselargumente unsinnige Werte besitzen - es geht um das allgemeine Verständnis. Weil diese Methode an mehreren Stellen verwendet wird, möchte ich keine identischen Aufgaben programmiertechnisch doppelt und dreifach wiederholen. Ich habe gehofft, hierbei alles "zusammenzufassen". Aber leider habe ich keine Idee, wie ich das Problem lösen könnte.
- 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 "Do some with argument", argument
- print "Do some with first keyword:", keyword_arg_first
- print "Do some with second keyword", 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_()