#!/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()
请考虑此代码。现在,当我单击"打印单击"按钮时。"假"被打印(在选项函数中)。为什么会这样?
QPushButton
继承了 QAbstractButton
的信号clicked
。
Qt文档指出:
void QAbstractButton::clicked ( bool check = false ) [信号]
当按钮被激活(即在鼠标光标在按钮内时按下然后释放)、键入快捷键或调用 click() 或 animateClick() 时,会发出此信号。值得注意的是,如果您调用 setDown()、setChecked() 或 toggle(),则不会发出此信号。
如果按钮可检查,则选中按钮时为 true;如果未选中按钮,则为 false。
插槽收到的参数指示是否选中按钮。由于默认情况下QPushButton
不可检查。参数总是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))