PyQt5——信号与槽关联

信号和槽关联

信号(signal)和槽(slot)是Qt的核心机制。在创建事件循环之后,通过建立信号和槽的链接就可以实现对象之间的通信。当信号发射(emit)时,连接的槽函数将自动执行。在PyQt5中,信号和槽通过QObject.signal.connect)连接。

简单入门

新建一个模板为Widget的简单窗口,左侧有一个Buttons栏,选择PushBotton空间,拖拽到Form中,将text属性改为关闭窗口。PyQt5——信号与槽关联_第1张图片

点击工具栏谁给你的“编辑信号/槽”或者点击 “Edit”(编辑)菜单-编辑信号/槽,进入信号槽编辑模式,可以直接发射者上按住鼠标左键不放,拖动到接收者上,建立了连接

PyQt5——信号与槽关联_第2张图片

弹出配置连接
PyQt5——信号与槽关联_第3张图片

可以看到按钮控件有很多的发射信号,只要选择一个信号,然后点击ok按钮,就会生成对应的槽函数对按钮发射的该信号进行处理。

由于要达到点击按钮关闭窗口的效果,所以需要勾选“显示QWdiget继承的信号和槽”的复选框,在左侧的closeWinBtn按钮的信号栏选择clicked()信号,在右侧的Form槽函数中选择close()。这意味着关闭窗口按钮会发射clicked信号,这个信号会被Form窗口的槽函数close()捕捉到,并触发该窗体的close行为
PyQt5——信号与槽关联_第4张图片

转换为python文件为

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

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(791, 528)
        self.closeWinBtn = QtWidgets.QPushButton(Form)
        self.closeWinBtn.setGeometry(QtCore.QRect(430, 230, 75, 23))
        self.closeWinBtn.setObjectName("closeWinBtn")

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.closeWinBtn.setText(_translate("Form", "关闭窗口"))

self.closeWinBtn.clicked.connect(Form.close)

其实现的流程是:按钮是信号发射者,当单击按钮之后会发射一个信号,通过折行代码程序内部的通信机制会知道这个按钮的单击事件被连续都窗体的关闭事件上,然后通过接受者窗体,可以运行槽函数close()

为了使窗口的显示和业务逻辑分离,调用函数

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from MainWinSignalSlog01 import Ui_Form

class MyMainWindow(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWin = MyMainWindow()
    myWin.show()
    sys.exit(app.exec_())

PyQt5——信号与槽关联_第5张图片

设置更加复杂的

PyQt5——信号与槽关联_第6张图片
在右下侧的信号与槽编辑窗口来进行调整
PyQt5——信号与槽关联_第7张图片

self.checkBox.clicked['bool'].connect(self.label.setVisible)
self.checkBox.clicked['bool'].connect(self.lineEdit.setEnabled)

具体和信号与槽的代码如上。

具体的调用函数

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from MainWinSignalSlog03 import Ui_MainWindow

class MyMainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.setupUi(self)
        self.checkBox.setChecked(True) # 设置checkBox默认的初始状态为选择


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MyMainWindow()
    win.show()
    sys.exit(app.exec_())

PyQt5——信号与槽关联_第8张图片

你可能感兴趣的:(Python)