ホームページ >バックエンド開発 >Python チュートリアル >PyQt4 でループされた信号接続の問題を回避するには?
PyQt4 でのスロットと信号の接続: ループされた信号接続の問題の解決
ループ内で PyQt4 の信号を接続しようとすると、一般的に次のような問題が発生します。すべてのボタンが同じ値を出力するなど、予期しない動作が発生する可能性があります。この問題は、Python でのスコープ、名前検索、およびクロージャの機能に起因します。
提供されたコード内で、ボタンの接続に使用されるラムダ関数には、変数 i に対する独自のバインディングがなく、代わりに変数 i の値を検索します。 __init__ メソッドの名前空間。したがって、ループ内で定義された最後の値 (この場合は 9) が常に想定されます。
これを解決するために、Python は次のようないくつかの解決策を提供します。
デフォルトのキーワード引数値:
i をデフォルト値のキーワード引数として渡すことで、ラムダ関数内に新しいバインディングを作成します:
self._numberButtons[i].clicked.connect(lambda checked, i=i: self._number(i))
functools.partial:
これにより、関数呼び出しを必要な引数でラップすることにより、より簡潔で読みやすいアプローチが提供されます。
self._numberButtons[i].clicked.connect(partial(self._number, i))
これらの手法を利用すると、各ボタンのコールバック関数内で適切なバインドが確保され、各ボタンが対応する値を表示できるようになります。クリックしました。
以上がPyQt4 でループされた信号接続の問題を回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。