2016-06-29 17 views
5

PyQtボタンイベントは、関数に通常の方法で接続して、デフォルトのシグナル引数(この場合はボタンをチェックした状態)を受け取ることができます:デフォルトのシグナル引数を失うことなく、PyQtスロットに余分な引数を渡す

def connections(self): 
    my_button.clicked.connect(self.on_button) 

def on_button(self, checked): 
    print checked # prints "True" 

または、デフォルトの信号引数はlambdaを使用してオーバーライドすることができます。

def connections(self): 
    my_button.clicked.connect(lambda: self.on_button('hi')) 

def on_button(self, message): 
    print message # prints "hi" 

は、それが直接、下記のような機能が受信できるように、両方の信号の引数を保つための良い方法はありますか?

def on_button(self, checked, message): 
    print checked, message # prints "True, hi" 
+0

あなたがボタンをサブクラス化できますし、状態を放出する新しい信号を作成しますボタンとメッセージが表示されます。 – SnoozeTime

+0

[Eli Bendersky](https://eli.thegreenplace.net)投稿[これに関する記事](https://eli.thegreenplace.net/2011/04/25/passing-extra-arguments-to-pyqt-スロット)。 – delrocco

答えて

11

あなたlambda引数を取ることができる:

def connections(self): 
    my_button.clicked.connect(lambda checked: self.on_button(checked, 'hi')) 

def on_button(self, checked, message): 
    print checked, message # prints "True, hi" 

それとも、functools.partial使用できます。

def connections(self): 
    my_button.clicked.connect(functools.partial(self.on_button, 'hi')) 

def on_button(self, message, checked): 
    print checked, message # prints "True, hi" 
関連する問題