首頁  >  文章  >  後端開發  >  如何將額外參數傳遞給 PyQt 中的 Qt 插槽?

如何將額外參數傳遞給 PyQt 中的 Qt 插槽?

Patricia Arquette
Patricia Arquette原創
2024-11-19 16:48:03161瀏覽

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 函數

透過槽傳遞額外參數的一種方法是使用 lambda函數。 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

在此範例中,lambda 函數採用額外參數DiffP 並將其傳遞給some_slot 函數.

解:使用functools.partial

透過槽傳遞額外參數的另一種方法是使用functools.partial 函數。部分函數建立一個新函數,該函數部分應用了一些參數。您可以使用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

在此範例中,partial函數建立一個僅採用button_or_id參數的新函數並將 DiffP 參數綁定到它。當呼叫槽時,將使用正確的參數呼叫新函數。

以上是如何將額外參數傳遞給 PyQt 中的 Qt 插槽?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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