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(boolchecked = false)[シグナル]

この信号は、ボタンがアクティブ化されたとき(つまり、マウスカーソルがボタン内にあるときに押し下げてから離したとき)、ショートカットキーを入力したとき、またはclick()またはanimateClick()が呼び出されたときに発行されます。特に、setDown()、setChecked()、またはtoggle()を呼び出した場合、このシグナルは発行されません。

ボタンがチェック可能である場合、チェックはボタンがチェックされている場合は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 に答える