zoukankan      html  css  js  c++  java
  • 【PyQt5】信号与槽+装饰器定义槽函数

    5、使用装饰器定义信号和槽函数

    使用方法:

    @PyQt5.QtCore.pyqtSlot(参数)

    def on_发送者对象名称_发射信号名称(self,参数):

      pass

    使用方法有效的前提是下面函数执行的情况下:

    QMetaObject.connectSlotsByName(QObecjt)

    案例:

     1 from PyQt5 import QtCore
     2 from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton
     3 import sys
     4 
     5 class CustWidget(QWidget):
     6     def __init__(self, parent = None):
     7         super(CustWidget,self).__init__(parent)
     8 
     9         self.okButton = QPushButton('OK', self)
    10         # 使用setObjectName函数设置对象的名字,newButton 后面要用到
    11         self.okButton.setObjectName('newButton')
    12         layout = QHBoxLayout()
    13         layout.addWidget(self.okButton)
    14         self.setLayout(layout)
    15         QtCore.QMetaObject.connectSlotsByName(self)
    16 
    17     @QtCore.pyqtSlot()
    18     def on_newButton_clicked(self):
    19         print('单击了OK按钮')
    20 
    21     #     self.okButton.clicked.connect(self.newButton_clicked)
    22     #
    23     # def newButton_clicked(self):
    24     #     print('单击了OK按钮')
    25 
    26 if __name__ == '__main__':
    27     app = QApplication(sys.argv)
    28     win = CustWidget()
    29     win.show()
    30     app.exec_()
    31     # sys.exit(app.exec_())

     下面这段代码的核心就是QtCore.QMetaObject.connectSlotsByName(self)

         QtCore.QMetaObject.connectSlotsByName(self)
     
         @QtCore.pyqtSlot()
         def on_newButton_clicked(self):
             print('单击了OK按钮')

    与下面的写法效果一样:

    #     self.okButton.clicked.connect(self.newButton_clicked)## def newButton_clicked(self):#     print('单击了OK按钮')
    如果只写一两个槽函数可能不觉得,如果多了 这句话就可以省很多事。而且结构上会更清晰。
  • 相关阅读:
    WCF里几个基本知识点
    MVC3+EntityFramework实践笔记
    一些vim的插件和配置
    Web API工作方式
    计算机中的异常
    Glusterfs之nfs模块源码分析
    ASP.NET Windows身份认证
    Sql Server表结构及索引辅助查看工具
    sql server批量插入与更新两种解决方案
    如何在ViewModel中正确地使用Timer(定时器)
  • 原文地址:https://www.cnblogs.com/watalo/p/12295734.html
Copyright © 2011-2022 走看看