学以致用

focus on Python , C++, and some interest in Go and R

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

常见的一个问题就是如何向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/

posted on 2012-03-22 16:04  Jerry.Kwan  阅读(1468)  评论(0编辑  收藏  举报