信号是否包含数据 pyqt5?

Do signals contain data pyqt5?

我无法理解信号是否包含某些数据。 例如,信号 windowTitleChanged 包含一个 str 类型的数据,需要将其传递给它的槽:

self.windowTitleChanged.connect(lambda x  : self.onTitle(x)) 

## or self.windowTitleChanged.connect(self.onTitle) which also automatically sends a data

def onTitle(self,k):
        print(k)

虽然某些信号如 clicked 不发送数据,除非它们被设置为 checkable(包含 bool 类型数据)。单击下面代码中的 pushBotton 什么都不做(尽管 def buttonClicked(self,pressed) 需要 pressed 参数,但令我惊讶的是它没有引发错误。

btn2.clicked.connect(self.buttonClicked)

def buttonClicked(self,pressed):
        if pressed:

            self.statusBar().showMessage("l")

在我看来,有些信号如 windowTitleChanged 包含数据并且可以在槽内使用,而有些信号包含 None 类型的数据(如 clicked 信号)。 我的理解正确吗?

It seems to me that some signals likewindowTitleChanged contain a data and can be used within the slot, while some contain a None type data (like clicked signal). Is what i've understood correct?

是的,你是对的。您甚至可以通过创建自定义信号来查看实际效果。

from PyQt5.QtCore import pyqtSignal, Qobject
class Analyzer(QObject):
    analyze_completed = pyqtSignal(bool)

在上面的代码片段中,如果您发出带有 boolanalyze_completed 信号,则连接到该信号的插槽将接收 bool 作为参数。