pyqt5自定义信号实例解析

  

本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下。

  

PyQt5已经自动定义了很多QT内建的信号。但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义信号。可以使用pyqtSignal()方法定义新的信号,新的信号作为类的属性。

  

自定义信号说明:

  

pyqtSignal()方法原型(PyQt官网的定义):

  
  

PyQt5.QtCore。pyqtSignal(类型、名称(修订=0[,参数=[]]]])
  创建>   从PyQt5。QtCore进口QObject pyqtSignal      类NewSignal (QObject):      #定义了一个“封闭”信号,该信号没有参数据   关闭=pyqtSignal ()      #定义了一个“range_changed”信号,该信号有两个int类型的参数   range_changed=pyqtSignal (int, int, name=' rangeChanged ')      

自定义信号的发射,通过排放()方法类实现,具体参见该函数的原型:

  
  

发出(* args)
  参数:参数-可选的参数序列通过任何连接槽。

     

通过下面的例子,了解一下关于排放()的使用:

        从PyQt5。QtCore进口QObject pyqtSignal      类NewSignal (QObject):      #一个valueChanged的信号,该信号没有参数。   valueChanged=pyqtSignal ()      def connect_and_emit_valueChanged(自我):   #绑定信号和槽函数   self.valueChanged.connect (self.handle_valueChanged)      #发射信号。   self.trigger.emit ()      def handle_valueChanged(自我):   打印(“触发信号接收”)      

示例说明:

  

自定义信号的一般流程如下:
  

  

1,定义信号
  2、定义槽函数
  3,绑定信号和槽
  4,发射信号

  

通过代码示例来了解一下信号的自定义过程:

        # - * -编码:utf - 8 - *   “‘   定义信号   “‘   __author__='托尼?朱'   导入系统   从PyQt5。QObject QtCore进口pyqtSignal, Qt, pyqtSlot   从PyQt5。QtWidgets进口QWidget、QApplication QGroupBox、QPushButton QLabel, QCheckBox, QSpinBox, QHBoxLayout, QComboBox QGridLayout         类SignalEmit (QWidget):   helpSignal=pyqtSignal (str)   printSignal=pyqtSignal(列表)   #声明一个多重载版本的信号,包括了一个带int和str类型参数的信号,以及带str参数的信号   previewSignal=pyqtSignal ([int, str), (str))   def __init__(自我):   super () . __init__ ()   self.initUI ()         def initUI(自我):      self.creatContorls(“打印控制:”)   self.creatResult(“操作结果:”)      布局=QHBoxLayout ()   layout.addWidget (self.controlsGroup)   layout.addWidget (self.resultGroup)   self.setLayout(布局)      self.helpSignal.connect (self.showHelpMessage)   self.printSignal.connect (self.printPaper)   self.previewSignal (str) .connect (self.previewPaper)   self.previewSignal (int, str) .connect (self.previewPaperWithArgs)   self.printButton.clicked.connect (self.emitPrintSignal)   self.previewButton.clicked.connect (self.emitPreviewSignal)      自我。setGeometry (300、300、290、150)   自我。setWindowTitle(定义信号)   self.show ()      def creatContorls(自我、标题):   自我。controlsGroup=QGroupBox(标题)   自我。printButton=QPushButton(“打印”)   自我。previewButton=QPushButton(“预览”)   numberLabel=QLabel(“打印份数:")   pageLabel=QLabel(“纸张类型:”)   自我。previewStatus=QCheckBox(“全屏预览”)   自我。numberSpinBox=QSpinBox ()   self.numberSpinBox。setRange (100)   自我。styleCombo=QComboBox(自我)   self.styleCombo.addItem (A4)   self.styleCombo.addItem (A5)      controlsLayout=QGridLayout ()   controlsLayout。addWidget (numberLabel, 0, 0)   controlsLayout.addWidget(自我。numberSpinBox 0 1)   controlsLayout。addWidget (pageLabel 0 2)   controlsLayout.addWidget(自我。styleCombo 0 3)   controlsLayout.addWidget(自我。printButton 0 4)   controlsLayout.addWidget(自我。previewStatus 3 0)   controlsLayout.addWidget(自我。previewButton 3 1)   self.controlsGroup.setLayout (controlsLayout)      def creatResult(自我、标题):   自我。resultGroup=QGroupBox(标题)   自我。resultLabel=QLabel (" ")   布局=QHBoxLayout ()   layout.addWidget (self.resultLabel)   self.resultGroup.setLayout(布局)      def emitPreviewSignal(自我):   如果self.previewStatus.isChecked ()==True:   self.previewSignal (int, str)。发出(1080年,“全屏”)   elif self.previewStatus.isChecked ()==False:   self.previewSignal (str) .emit(“预览”)      def emitPrintSignal(自我):   pList=[]   pList.append (self.numberSpinBox。值())   pList.append (self.styleCombo.currentText ())   self.printSignal.emit (pList)      def printPaper(自我,列表):   self.resultLabel。setText(“打印:“+”份数:”+ str(列表[0])+“纸张:“+ str(列表[1]))      def previewPaperWithArgs(自我、风格、文本):   self.resultLabel.setText (str(风格)+文本)      def previewPaper(自我、文本):   self.resultLabel.setText(文本)      def keyPressEvent(自我、事件):      如果event.key ()==Qt.Key_F1:   self.helpSignal。发出(“帮助信息”)      def showHelpMessage(自我、消息):   self.resultLabel.setText(消息)   # self.statusBar () .showMessage(消息)         if __name__==癬_main__”:      应用=QApplication (sys.argv)   调度=SignalEmit ()   sys.exit (app.exec_ ())

pyqt5自定义信号实例解析