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.
Code: Alles auswählen
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_()