使用lambda将参数传递给槽函数

时间:2013-02-02 09:11:30

标签: python pyqt pyqt4 lambda

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QMainWindow):
    def __init__(self):
        super(Example, self).__init__();
        self.initUI()


    def initUI(self):
        self.button = QtGui.QPushButton("print clicked",self)
        self.clicked='not_clicked'
        self.button.clicked.connect(lambda opt='clicked': self.option(opt)) 

    def option(self,opt):
        self.clicked=opt
        print opt



def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

if __name__=='__main__':
    main()

考虑这段代码。现在,当我点击“打印点击”按钮时。打印'False'(在选项功能中)。为什么会这样?

1 个答案:

答案 0 :(得分:1)

QPushButtonclicked继承信号QAbstractButton Qt文档说明:

  

void QAbstractButton :: clicked(bool checked = false )[signal]

     

当按钮被激活(即按下然后在鼠标光标位于按钮内部时释放),键入快捷键或调用click()或animateClick()时,会发出此信号。值得注意的是,如果调用setDown(),setChecked()或toggle(),则不会发出此信号。

     

如果按钮可检查,如果选中该按钮,则选中该选项;如果未选中该按钮,则选中该选项。

插槽接收的参数表示是否选中了按钮。由于QPushButton默认为,因此无法检查。参数总是False。这就是'False'印刷的原因。

如果您希望打印结果不同,打印“True”或“False”,您可以设置按钮checkable或将其更改为QCheckBox。 例如,initUI应为

def initUI(self):
    self.button = QtGui.QCheckBox("print clicked",self)
    self.button.setCheckable(True)
    self.clicked='not_clicked'
    self.button.clicked.connect(lambda opt='clicked': self.option(opt)) 

def initUI(self):
    #self.button = QtGui.QPushButton("print clicked",self)
    self.button = QtGui.QCheckBox("print clicked",self)
    self.clicked='not_clicked'
    self.button.clicked.connect(lambda opt='clicked': self.option(opt)) 
相关问题