Skip to content

信号与槽

信号是发生的事件, 槽是事件的处理, 使用槽进行捕获事件, 执行和槽绑定的函数

一般需要把信号和槽进行绑定

python
对象.信号.connect(槽函数)

信号可以是Qt自带的, 也可以使我们发送的

python
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUI()
    
    def setupUI(self):
        self.setGeometry(800, 200, 300, 300)
        self.setWindowTitle("Signal and Slot")
        
        btn = QPushButton("Click me", self)
        btn.move(10, 10)
        btn.clicked.connect(self.click_my_btn)
    
    def click_my_btn(self, arg):
        print("press btn", arg)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    app.exec()

使用自己的信号

python
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *




class MyWindow(QMainWindow):
    # 创建一个信号, 这一个信号只能
    my_signal = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.resize(300, 200)
        btn = QPushButton("begin", self)
        btn.setGeometry(10, 10, 100, 30)
		
        btn.clicked.connect(self.check)
        self.my_signal.connect(self.my_slot)

    def check(self):
        """
        发送一个信号
        """
        self.my_signal.emit("hello")
    
    def my_slot(self, msg):
        """
        槽函数
        """
        print(msg)
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    app.exec()