首頁  >  文章  >  後端開發  >  如何使用 Lambda 函數或 functools.partial 將額外參數傳遞給 Qt 插槽?

如何使用 Lambda 函數或 functools.partial 將額外參數傳遞給 Qt 插槽?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-19 10:17:02568瀏覽

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

透過 Connect 傳遞額外參數

在 Qt 應用程式中連接槽時,可能需要向槽函數傳遞額外參數。這可以透過兩種方式完成:使用 lambda 函數或 functools.partial。

使用 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
    ...

使用Functools.Partial

Functools。 partial 提供了另一種將額外參數傳遞給槽函數的方法。它會建立一個綁定到指定參數的新函數。一般語法為:

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

其中:

  • fun:目標槽函數
  • args1, arg2, ...:傳遞給新函數的額外參數函數

以下是在程式碼中使用它的方法:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn