ホームページ >バックエンド開発 >Python チュートリアル >ラムダ式を使用して複数のボタンを PyQt の同じスロットに接続すると、予期しない動作が発生するのはなぜですか?
ラムダ式を使用して PyQt でスロットを接続する
Qt では、ラムダ式を使用して信号をスロットに接続できます。ただし、このアプローチには、予期しない動作を引き起こす可能性のあるいくつかの制限があります。
問題:
ラムダ式を使用して複数のボタンを同じスロットに接続する場合、最後の接続は正しく機能します。具体的には、connect() への個別の呼び出しを通じて手動で接続されたボタンは成功しますが、ラムダ式を使用してループで接続されたボタンはすべて同じ誤った結果をもたらします。
分析:
この問題は、シグナルの起動時にラムダ式が評価され、そのオプションの引数の値がシグナルの引数によって上書きされるという事実から発生します。 QPushButton.clicked 信号の場合、この引数はボタンの状態を表します。
解決策:
問題を解決するには、ラムダ式を変更する必要があります。次のように:
ラムダ式の最初の引数として状態を追加することで、状態を無視できます。ただし、idx の意図した値をスロットに渡すことはできます。
ラムダ式の接続を理解する:
ラムダ式を使用して信号を接続すると、シグナルが発生するたびに評価される匿名関数を作成します。ラムダ式のパラメーターは、信号の引数 (この場合はボタンの状態) にバインドされます。次に、ラムダ式の結果を引数としてスロットが呼び出されます。
以上がラムダ式を使用して複数のボタンを PyQt の同じスロットに接続すると、予期しない動作が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。