PySide2 自定義信號

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_())

運行結果:

 

發佈了87 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章