PyQt アプリケーションでは、スロットはシグナルの発行時に呼び出されるメンバー関数です。これらのシグナルは、ボタンやウィジェットなどのさまざまな Qt オブジェクトによって発行できます。デフォルトでは、スロットはシグナルによって渡されたパラメーターを受け取ります。ただし、追加の引数をスロットに渡すことも可能です。
次のシナリオを考えてみましょう。DiffP という名前の変数を定義する関数があります。この変数を、ボタンのクリック イベントに接続されているスロットに渡したいと考えています。
class MyWidget(QtWidgets.QWidget): def __init__(self): [...] self.button.clicked.connect(self.some_slot) def some_slot(self): # Here you want to access the 'DiffP' variable defined in another function
スロットを介して追加の引数を渡す 1 つの方法は、lambda を使用することです。機能。 Lambda 関数は、インラインで定義できる匿名関数です。デフォルトのスロットパラメータと、渡したい追加の引数の両方を受け取るラムダ関数を作成できます。
class MyWidget(QtWidgets.QWidget): def __init__(self): [...] self.button.clicked.connect(lambda: self.some_slot("DiffP")) def some_slot(self, DiffP): # Here you can access the 'DiffP' variable
この例では、ラムダ関数は追加の引数 DiffP を受け取り、それを some_slot 関数に渡します。 .
スロットを介して追加の引数を渡すもう 1 つの方法は、functools.partial 関数を使用することです。部分関数は、いくつかの引数を部分的に適用する新しい関数を作成します。部分関数を使用すると、デフォルトのスロット パラメーターのみを受け取る関数を作成し、追加の引数をバインドされた引数として渡すことができます。
from functools import partial class MyWidget(QtWidgets.QWidget): def __init__(self): [...] self.button.clicked.connect(partial(self.some_slot, "DiffP")) def some_slot(self, DiffP): # Here you can access the 'DiffP' variable
この例では、部分関数は button_or_id パラメーターのみを取る新しい関数を作成します。そしてそれに DiffP 引数をバインドします。スロットが呼び出されると、新しい関数が正しい引数を使用して呼び出されます。
以上がPyQt の Qt スロットに追加の引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。