如何將額外參數傳遞給 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 函數

透過槽傳遞額外參數的一種方法是使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板