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按钮')
    如果只写一两个槽函数可能不觉得,如果多了 这句话就可以省很多事。而且结构上会更清晰。
  • 相关阅读:
    几张图就把 Kubernetes Service 掰扯清楚了
    一文读懂 Kubernetes APIServer 原理
    K8S调度系统由浅入深系列:简介
    K8S蓝绿部署:Blue/Green Deployments on Kubernetes
    K8s Nginx Ingress 介绍
    探索 Kubernetes HPA
    [译]走进Kubernetes集群的大脑:Etcd
    AIX文件系统大小限制调整(转)
    修改SSH服务监听端口,引起服务启动失败原因分析
    Docker-compos部署nextcloud私有网盘
  • 原文地址:https://www.cnblogs.com/watalo/p/12295734.html
Copyright © 2011-2022 走看看