常见的一个问题就是如何向PySide/PyQt的slot中传递额外的参数。slot的机理就是将signal和slot建立关联,signal的参数能够传递到slot中,但额外的参数(用户自定义的)并不能直接传递进去。
但现实中传递用户自定义的参数还是很有意义的,这样一来用户就可以定义一个slot来处理多个signals,只是通过参数来区分即可。
如果实现呢?
一个简单的方法就是借助于lambda,下面是一个简单的例子:
self.configInqAct = QtGui.QAction("Inquiry", self)
self.configInqAct.setStatusTip("Inquiry all the config files")
self.configInqAct.triggered.connect(lambda:self.process_config("010010", ""))
def process_config(self, tran_code, data):
self.statusBar().showMessage("tran_code = %s, data = %s" %(tran_code, data))
当然也可通过重载来实现,具体可以参阅 http://qt-project.org/wiki/Signals_and_Slots_in_PySide
参考资料:
http://qt-project.org/wiki/Signals_and_Slots_in_PySide
http://eli.thegreenplace.net/2011/04/25/passing-extra-arguments-to-pyqt-slot/