(5)pyqt5--->连接信号和槽的另外一种方法

GitHub连接:
本专栏所有源代码的GitHub直通车

上一篇已经讲了如何去自定义信号和槽以及使用和传参

这种方法有点奇怪
不过学完这种方式之后,我感觉这种方式好像没有那么灵活对吧,这个等下会提一下

先看代码
主程序代码:

"""
/********************************************************************************
* @Filename: 装饰器信号与槽.py
* @Author: haomingHu
* @Version: 1.0
* @Date:  2020-12-16
* @Description: 
* @History: 
********************************************************************************/
"""
from ui4 import Ui_Form#导入在QTdesigner设计好的 ui.py 文件
import sys
from PyQt5 import QtWidgets,QtCore

class mydesigner(QtWidgets.QWidget,Ui_Form):
    def __init__(self):
        super(mydesigner,self).__init__()
        self.setupUi(self)
        

        QtCore.QMetaObject.connectSlotsByName(self)

    @QtCore.pyqtSlot()
    def on_open_clicked(self):
        self.calendarWidget.close()

    @QtCore.pyqtSlot()
    def on_close_clicked(self):
        self.calendarWidget.show()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myshow = mydesigner()
    myshow.show()
    sys.exit(app.exec_())

ui文件代码:

"""
/********************************************************************************
* @Filename: ui4.py
* @Author: haomingHu
* @Version: 1.0
* @Date:  2020-12-16
* @Description: 
* @History: 
********************************************************************************/
"""


# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui4.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(432, 325)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(40, 220, 75, 23))
        self.pushButton.setObjectName("open")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(290, 220, 75, 23))
        self.pushButton_2.setObjectName("close")
        self.calendarWidget = QtWidgets.QCalendarWidget(Form)
        self.calendarWidget.setGeometry(QtCore.QRect(80, 10, 248, 197))
        self.calendarWidget.setObjectName("calendarWidget")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "PushButton"))
        self.pushButton_2.setText(_translate("Form", "PushButton"))

其它的代码看看就行了,主要看下面这几行代码:


    @QtCore.pyqtSlot()
    def on_open_clicked(self):
        self.calendarWidget.close()

    @QtCore.pyqtSlot()
    def on_close_clicked(self):
        self.calendarWidget.show()

首先,用这种方法的前提就是必须要先执行下面这一行代码,(这行代码在setupUi函数里面有)

QtCore.QMetaObject.connectSlotsByName(Form)

这行代码是pyqt5中根据信号名称自动连接到槽函数的核心代码,这行代码用来将QObject中子孙对象的某些信号按照其objextName连接到相应的槽函数汇总,

其次连接的格式就是:
@QtCore.pyqtSlot()
def on_objectSignal_function(self):

objectName就是控件的名字
function就是要连接的控件的信号,在这里是点击信号 clicked

突发奇想的一个问题就是,如果我的objectName是一个中文名,那这个functionName岂不是很拗口!!

好吧,这个就讲到这里,至于这种方法怎么出啊参数,感觉也是跟emit一样,差不多的!

上一篇:pyqt5实战之幻彩大蛇(贪吃蛇)-1


下一篇:python之线程通过信号pyqtSignal刷新ui的方法