前言
PyQt5的信号与槽是一种对象之间的通信机制,允许一个QObject对象发出信号,与之相连接的槽函数将会自动执行。信号与槽有以下几个特点:
- 信号可以携带任意个、任意类型的参数。
- 一个信号可以连接多个槽,即一个槽可以监听多个信号。
- 信号与槽的连接方式可以是同步连接,也可以是异步连接。
- 信号与槽可能会在不同的线程间连接,这时信号连接只能是异步方式。
- 信号不是必须有槽和其连接,即信号可以不处理。
- 信号个槽的连接可以被断开。
PyQt5使用pyqtSignal函数为QObject对象创建信号,并把信号定义为类的属性。使用connect()函数可以将信号绑定到槽函数上,使用disconnect()函数可以接触信号和槽之间的绑定。
信号与槽单对单
直接连接
import sys
from PyQt5.QtWidgets import *
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.btn = QPushButton("Start", self)
self.btn.clicked.connect(self.change_text)
def change_text(self):
if self.btn.text() == "Start":
self.btn.setText("Stop")
else:
self.btn.setText("Start")
if __name__ == "__main__":
app = QApplication([])
window = Window()
window.show()
sys.exit(app.exec())
在上述代码中创建一个QPushButton对象self.btn,并将其文本设置为"Start"。这个按钮被添加到当前窗口中(由self表示)。
self.btn.clicked.connect(self.change_text): 当按钮被点击时,将调用change_text方法。在change_text的方法中根据当前按钮显示的文字改变为另一个文字。
这个简单的程序创建了一个窗口,其中包含一个可以切换其标签的按钮(“Start"和"Stop”)。每次点击按钮时,都会调用change_text方法来更改其标签。
运行结果如下,运行时按钮上的文字是Start,按下之后会变成Stop
使用lambda表达式
import sys
from PyQt5.QtWidgets import *