2016-10-28 3 views
1

ループ内に一連のボタンを作成しようとしています。各ボタンはテキストとしてID番号を取得し、ボタンをクリックするとID番号をアーカイブされた注文を開く関数に送信することになっています。現時点では、信号が機能し、各ボタンが正しい注文番号に接続されていることを証明する注文番号を印刷したいだけです。Pythonループで作成されたButtonから信号を送信できません

ui.cmdOpen = QtWidgets.QPushButton(ui.frOrdHist) 
ui.cmdOpen.setGeometry(QtCore.QRect(269, line1Y, 61, 22)) 
ui.cmdOpen.setText(iOrderId) 
ui.cmdOpen.setObjectName("cmdOpen") 
ui.cmdOpen.clicked.connect(lambda button=ui.cmdOpen:displayOrder(ui, button)) 


def displayOrder(ui, button): 
    i = button.text() 
    print(i) 

私はボタンをクリックすると、私は「ブーリアンオブジェクトがテキスト属性を持っていません」というエラーメッセージ

を得るブールので、まだ私は、直接注文番号を渡してみました、それが「偽」印刷します。ブール値がどこから来ているのか分かりませんが、信号に何か間違っているはずです。

+0

ループでボタンを作成している場合は、クロージャの問題が発生している可能性があります。ループコード – theodox

+0

が含まれていると診断が容易になります。http://stackoverflow.com/questions/15080731/call-a-function-when-a-button-is-pressed-pyqt – intrepidhero

答えて

1

clicked信号は、常にボタンのチェック状態を送信します。これはあなたのbutton引数をブール値で上書きするため、なぜあなたは属性エラーを取得します。したがって、このような接続を作成する必要があります。

ui.cmdOpen.clicked.connect(
    lambda checked, button=ui.cmdOpen: displayOrder(ui, button)) 
関連する問題