PyQtのConnectで引数付きの関数を渡す方法
PyQtではconnectを使ってイベントに対応する関数を呼び出すことが出来ます。しかし引数付きの関数をconnectに直接渡すことは出来ません。以下のようなエラーが発生すると思います。
"TypeError: connect() slot argument should be a callable or a signal, not 'NoneType'"
これを解決するためにはlambda
を使って式にする方法を使います。
以下のようなコードにすればよいでしょう。
# -*- coding: utf-8 -* from PyQt4.QtCore import * from PyQt4.QtGui import * import sys class MyForm(QMainWindow): def __init__(self, parent=None): super(MyForm, self).__init__(parent) button = QPushButton('Click') # エラーが発生する # button.clicked.connect(self.on_click("Hello world")) # lambdaを使う button.clicked.connect(lambda: self.on_click("Hello world")) layout = QHBoxLayout() layout.addWidget(button) main_frame = QWidget() main_frame.setLayout(layout) self.setCentralWidget(main_frame) def on_click(self, str): print(str) if __name__ == "__main__": app = QApplication(sys.argv) main_window = MyForm() main_window.show() app.exec_()