PyQt の Qt スロットに追加の引数を渡すにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-19 16:48:03
オリジナル
162 人が閲覧しました

How Can I Pass Extra Arguments to Qt Slots in PyQt?

Qt スロットを介して追加の引数を渡す

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
ログイン後にコピー

解決策: Lambda 関数の使用

スロットを介して追加の引数を渡す 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 関数に渡します。 .

解決策: functools.partial の使用

スロットを介して追加の引数を渡すもう 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート