在以下可执行代码中,我将传递一些关键字参数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_()
答案 0 :(得分:0)