PySide2自定义信号与PyQt5中自定义信号差不多一样,只是PyQt5中的pyqtSignal变成了QtCore.Signal,用法还是一模一样。
import sys
from PySide2 import QtCore
from PySide2.QtWidgets import QDialog, QWidget, QVBoxLayout, QApplication, QPushButton
class Demo(QWidget):
speak = QtCore.Signal(str)
def __init__(self,parent=None):
QWidget.__init__(self, parent)
self.move(400, 200)
self.setWindowTitle('自定义信号与槽')
self.dlg = dlg(self)
self.dlg._signal.connect(self.acceptSignal) #绑定自定义信号到acceptSignal函数
self.button = QPushButton('接收信号')
self.vbox = QVBoxLayout()
self.vbox.addWidget(self.button)
self.setLayout(self.vbox)
self.show()
def acceptSignal(self, signal):
self.button.setText(signal)
class dlg(QDialog):
_signal = QtCore.Signal(str) #自定义信号,信号类型为str(字符串类型),其中类型与python的类型相对应,比如list传递一个列表
def __init__(self, parent=None):
super().__init__(parent=parent)
self.btn = QPushButton('信号发射')
self.box = QVBoxLayout()
self.box.addWidget(self.btn)
self.setLayout(self.box)
self.btn.clicked.connect(self.commit) #连接信号与槽
self.show()
def commit(self):
self._signal.emit('信号已接收') #发射自定义信号,发送的信号为字符串’信号已接收‘
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Demo()
sys.exit(app.exec_())
运行结果: