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一样,差不多的!
查看更多关于(5)pyqt5--->连接信号和槽的另外一种方法的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did126224