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_())
運行結果: