(3)pyqt5教程--->信号与槽初试

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

上一篇已经讲了如何使用QTdesigner生成ui文件并转化为py文件,最终实现界面代码分离的效果

信号与槽作是 QT 的核心机制,是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。它为高层次的事件处理自动生成所需要的附加代码。例如在tkinter模块中一个空间 都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在 QT 中信号和槽取代了这些函数指针。

所有 QObject 类都可以使用信号槽,继承自 pyqt 中的类基本上都可以使用信号槽机制。

目前可以理解为:信号就是时间的触发,然后将这个信号与槽(另一个事件,可能为其它对象的)连接,比如说:我点击一个按钮就会将窗口关闭,这个时候按钮的点击事件就是一个信号,而窗口关闭则是槽接收信号之后处理的时间。具体的看下面的例子。

简单的实现槽有两种方式。第一种就是在QTdesigner中设计好信号与槽,另一个就是用代码实现连接。

第一种:
在QTdesigner中实现信号和槽的连接
(3)pyqt5教程--->信号与槽初试_第1张图片

在这里有两个对象:pushbutton按钮和form窗口,从按钮处单击拉一条线到form任意地方就指定了信号将会从pushbutton产生发送给form这个对象。连接完之后,弹出的窗口就是配置信号的界面,我这里给push配置的信号就是单击事件,然后form对象接收到之后会运行closed函数,这个时候窗口就会关闭。
(3)pyqt5教程--->信号与槽初试_第2张图片

下面这张图就可以很清楚的知道信号和槽之间的关系,还有发送者与接受者
在这里插入图片描述

QTdesigner生成的py代码:
在QTdesigner中的连线体现在 self.pushButton.clicked.connect(Form.close)这行代码。

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

# Form implementation generated from reading ui file '02.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(748, 523)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(90, 160, 75, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Form)
        self.pushButton.clicked.connect(Form.close)
        QtCore.QMetaObject.connectSlotsByName(Form)

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

主文件代码:

from ui2 import Ui_Form#导入在QTdesigner设计好的 ui.py 文件
import sys
from PyQt5 import QtWidgets


class mydesigner(QtWidgets.QWidget,Ui_Form):
    def __init__(self):
        super(mydesigner,self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.signaltest)
    def signaltest(self):
        print("haomingHu")

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

代码实现连接也是很简单,先明确一点就是这个槽可以是对象的固有成员函数也可以是自定义的函数,这个自定义函数可以是类的也可以是单独的。

        self.pushButton.clicked.connect(self.signaltest)
    def signaltest(self):
        print("haomingHu")

就是自定义了一个打印函数,当点击pushbutton按钮的时候,可以将按钮的click信号发送给form,接收到之后就可以去执行绑定的事件。(使用的函数是connect函数,绑定的函数不需要使用(),只需要一个函数名)
question:如果需要传参数怎么办? 这个有一点点绕,这个后面捋清楚请来补充或者放在下一篇讲述。

你可能感兴趣的:(pyqt5,python,qt,pyqt5,visual,studio,code)