ホームページ >バックエンド開発 >Python チュートリアル >PyQt でシグナルを通じて追加の引数を渡すにはどうすればよいですか?

PyQt でシグナルを通じて追加の引数を渡すにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-30 12:50:11333ブラウズ

How Can I Pass Extra Arguments Through Signals in PyQt?

PyQt のシグナルを介して追加の引数を渡す

はじめに

PyQt は、オブジェクト間の通信にさまざまなシグナルとスロットのメカニズムを提供します。シグナルはリスナーにイベントを通知するために発行されますが、スロットはシグナルの受信時に実行されるメソッドです。一般的な使用例の 1 つは、信号からスロットにデータを渡すことです。しかし、信号とともに追加のデータを送信したい場合はどうすればよいでしょうか?この記事では、ラムダ関数と functools.partial を使用してシグナルを通じて追加の引数を渡す方法について説明します。

Lambda 関数を使用した追加の引数の受け渡し

Python では、ラムダ関数は匿名関数です。インラインで定義する必要があります。これらは、スロットの定義を変更せずに追加の引数をスロットに渡す便利な方法を提供します。構文は次のとおりです:

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

ここで:

  • param1、param2、... はシグナルによって送信されるパラメータです
  • arg1、arg2、 ... は、渡す必要がある追加パラメータです

たとえば、次のコード:

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

@pyqtSlot(int)
def input(self, button_or_id, DiffP):
    if isinstance(button_or_id, int):
        if button_or_id == 0:
            self.TotalInput[0].setText(DiffP)
        elif button_or_id == 1:
            self.TotalInput[54].setText('1')

この例では、追加の引数「text」を渡すラムダ関数を使用して、buttonClicked 信号がスロット (入力) に接続されます。次に、入力スロットは DiffP 引数を使用して TotalInput ウィジェットを変更します。

functools.partial を使用した追加の引数の受け渡し

シグナルを介して追加の引数を渡すもう 1 つの方法は、functools.partial を使用することです。この関数は、元の関数の引数のサブセットが既に入力されている新しい関数を作成します。構文は次のとおりです。

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

ここで、

  • fun は、シグナルが発行されたときに呼び出される関数
  • args1、arg2、... は、必要な追加の引数です。 pass

たとえば、次のコードを考えてみましょう:

from functools import partial

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

@pyqtSlot(int)
def input(self, DiffP, button_or_id):
    if isinstance(button_or_id, int):
        if button_or_id == 0:
            self.TotalInput[0].setText(DiffP)
        elif button_or_id == 1:
            self.TotalInput[54].setText('1')

この例では、functools.partial を使用して、既に "text" 引数がバインドされている新しい関数を作成します。 。 buttonClicked シグナルが発行されると、DiffP 引数と以前に渡された "text" 引数を使用して入力スロットが呼び出されます。

結論

シグナルを介して追加の引数を渡すことは、PyQt では便利なテクニックとなり得ます。発達。これにより、信号とともに追加のデータを転送できるようになり、オブジェクト間の通信が強化されます。 lambda 関数と functools.partial の使用法を理解することで、PyQt アプリケーションでこの機能を効果的に活用できます。

以上がPyQt でシグナルを通じて追加の引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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