Qt designer-信号和槽(初识)

signal与slot是Qt的核心机制,即当事件循环创建后,通过信号与槽的连接,便可实现的对象之间的通信。通俗的说,信号发射后,其连接的槽函数将会自动执行。在pyqt5中,信号与槽通过QObject.signal.connect()连接。

简单使用 关闭窗口按键的设计

首先将控件拖入窗口并对objectName属性重命名
Qt designer-信号和槽(初识)_第1张图片
选择Edit菜单中的编辑信号/槽,进入信号槽编辑模式
直接在发射者(关闭窗口按钮)上按住鼠标左键不放,拖动到接收者(Form窗体)上,以建立连接
Qt designer-信号和槽(初识)_第2张图片
接着弹出配置连接菜单,勾选显示从QWidget继承的信号和槽复选框(为了实现单击按钮,关闭窗口的效果),左侧pushbutton 选择clicked()信号,右侧Form槽函数,选择close()
Qt designer-信号和槽(初识)_第3张图片
选择OK
Qt designer-信号和槽(初识)_第4张图片
保存转py

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

# Form implementation generated from reading ui file 'Signal.ui'
#
# Created by: PyQt5 UI code generator 5.14.1
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.closeWinBtn = QtWidgets.QPushButton(Form)
        self.closeWinBtn.setGeometry(QtCore.QRect(150, 130, 93, 28))
        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", "关闭窗口"))

创建一个调用窗口显示的文件

import sys
from PyQt5.QtWidgets import QApplication , QMainWindow
from Signal 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_())

大功告成

需要注意的是上述方法当信号与槽连接错误时,较难修改,我们可以直接使用右下角的signal/slot editor 来进行编辑
Qt designer-信号和槽(初识)_第5张图片
转化后的代码是

self.retranslateUi(MainWindow)
self.checkBox.clicked['bool'].connect(self.label.setVisible)
self.checkBox.clicked['bool'].connect(self.lineEdit.setEnabled)
self.checkBox.clicked['bool'].connect(self.textEdit.setVisible)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

效果
Qt designer-信号和槽(初识)_第6张图片
Qt designer-信号和槽(初识)_第7张图片
此外在编写逻辑文件时注意将checkBox初始化

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

你可能感兴趣的:(pyqt5)