ホームページ >バックエンド開発 >Python チュートリアル >Lambda 関数または functools.partial を使用して追加の引数を Qt スロットに渡す方法

Lambda 関数または functools.partial を使用して追加の引数を Qt スロットに渡す方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-19 10:17:02585ブラウズ

How to Pass Extra Arguments to Qt Slots Using Lambda Functions or functools.partial?

Connect 経由で追加の引数を渡す

Qt アプリケーションでスロットを接続する場合、スロット関数に追加の引数を渡す必要がある場合があります。これは、lambda 関数を使用するか、functools.partial を使用する 2 つの方法で実行できます。

Lambda 関数の使用

Lambda 関数を使用すると、信号をスロットに接続するときに追加の引数をキーワード引数として渡すことができます。一般的な構文は次のとおりです:

connect(lambda param1, param2, ..., arg1=val1, arg2=value2, ... : fun(param1, param2,... , arg1, arg2, ....))

ここで:

  • param1, param2, ...: シグナルによって受信されるパラメータ
  • arg1, arg2, ...: スロット関数に渡される追加パラメーター

あなたの場合、コードは次のようになります:

self.buttonGroup.buttonClicked['int'].connect(lambda i: self.input(i, "text"))

@pyqtSlot(int)
def input(self, button_or_id, DiffP):
    # Use the extra argument `DiffP` in the slot function
    ...

Using Functools.Partial

Functools。 Partial は、スロット関数に追加の引数を渡すための別のメソッドを提供します。指定された引数にバインドされた新しい関数を作成します。一般的な構文は次のとおりです:

partial(fun, args1, arg2, ... )

ここで:

  • fun: ターゲット スロット関数
  • args1、arg2、...: 新しいスロット関数に渡される追加の引数function

これをコード内で使用する方法は次のとおりです:

from functools import partial

...

self.buttonGroup.buttonClicked['int'].connect(partial(self.input, "text"))

@pyqtSlot(int)
def input(self, DiffP, button_or_id):
    # `DiffP` will be passed as the first argument to the slot function
    ...

以上がLambda 関数または functools.partial を使用して追加の引数を Qt スロットに渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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