0
#!/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' 被打印(在选项函数中)。为什么会这样?

4

1 回答 1

1

QPushButtonclicked从继承信号QAbstractButton
Qt 文档指出:

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

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

如果按钮是checkable,如果按钮被选中,则 checked 为 true,如果按钮未选中,则为 false。

插槽接收到的参数指示按钮是否被选中。因为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)) 
于 2013-02-02T09:54:56.550 回答