【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按钮')
如果只写一两个槽函数可能不觉得,如果多了 这句话就可以省很多事。而且结构上会更清晰。

猜你喜欢

转载自www.cnblogs.com/watalo/p/12295734.html