2013-02-02 67 views
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'被打印(在選項功能中)。這是爲什麼發生?使用lambda將參數傳遞給插槽功能

+0

見[此答案](http://stackoverflow.com/a/14176578/843822)。 – Avaris

回答

1

QPushButtonQAbstractButton繼承信號clicked
Qt文檔狀態:

空隙QAbstractButton ::點擊(布爾檢查=假)信號]

當按鈕被激活時,這個信號被髮射(即,按下然後在鼠標釋放遊標位於按鈕內),鍵入快捷鍵時或調用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))