signal与slot是Qt的核心机制,即当事件循环创建后,通过信号与槽的连接,便可实现的对象之间的通信。通俗的说,信号发射后,其连接的槽函数将会自动执行。在pyqt5中,信号与槽通过QObject.signal.connect()连接。
简单使用 关闭窗口按键的设计
首先将控件拖入窗口并对objectName属性重命名
选择Edit菜单中的编辑信号/槽,进入信号槽编辑模式
直接在发射者(关闭窗口按钮)上按住鼠标左键不放,拖动到接收者(Form窗体)上,以建立连接
接着弹出配置连接菜单,勾选显示从QWidget继承的信号和槽复选框(为了实现单击按钮,关闭窗口的效果),左侧pushbutton 选择clicked()信号,右侧Form槽函数,选择close()
选择OK
保存转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 来进行编辑
转化后的代码是
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)
效果
此外在编写逻辑文件时注意将checkBox初始化
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self)
self.checkBox.setChecked(True) # 设置checkBox默认的初始状态为选择