ホームページ >バックエンド開発 >Python チュートリアル >PyQt4 でループされた信号接続の問題を回避するには?

PyQt4 でループされた信号接続の問題を回避するには?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-13 16:52:02493ブラウズ

How to Avoid Looped Signal Connection Issues in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。