PyQt5-Qt Designer中如何设置信号与槽?

简介: PyQt5-Qt Designer中如何设置信号与槽?

1 基本概念

  • 信号与槽是PyQt的核心内容;
  • 信号(signal):是由对象或控件发射出去的消息;
  • 槽(slot):如按钮的单击事件,当单击按钮时,按钮会向外部发送单击的消息,这些发出去的信号需要一些代码来拦截,这些代码就是槽。

2 信号与槽关系

  • 槽本身是一个函数或方法;
  • 信号可以理解为事件,槽可以理解为事件函数;
  • 需要将信号与槽进行绑定;
  • 一个信号可以可多个槽绑定,一个槽也可以拦截多个信号。

3 Qt Designer中如何设置信号与槽

  • 可以通过代码直接进行信号和槽绑定;
  • 也可以通过Qt Designer实现信号和槽绑定;
  • 本文主要是了解Qt Designer中如何设置信号与槽。

3.1 如何设置信号与槽绑定?

  • 使用一个按钮来关闭我们创建的窗口;
  • 拖动一个按钮,名称为“关闭窗口”:
    在这里插入图片描述
  • 选择Edit-编辑信号/槽
    在这里插入图片描述
  • 鼠标放在按钮上,拖动鼠标打开配置连接窗口:
    在这里插入图片描述
  • 配置连接窗口左边显示的发送信号,右边是显示拦截(即要做的处理),这里左边选择clicked(),右边选close():
    在这里插入图片描述
  • 点击【OK】如下显示:
    在这里插入图片描述
  • 然后继续选择Edit-编辑信号/槽切换到正常模式,并进行预览,此时点击【关闭窗口】按钮会把当前的窗口进行关闭:
    在这里插入图片描述
  • 保存为test015_Sianal_Slot.ui并转成test015_Sianal_Slot.py
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test015_Sianal_Slot.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(794, 584)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 70, 101, 31))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 794, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "关闭窗口"))
  • 新建main.py并调用执行:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/9/25
# 文件名称:main.py
# 作用:主程序入口
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import sys
from test_case.test015_Sianal_Slot import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)
    window.show()

    sys.exit(app.exec_())

在这里插入图片描述

3.2 示例实现

  • 拖动一个CheckBox,并设置为选中状态:
    在这里插入图片描述
  • 拖动一个:
    在这里插入图片描述
  • 再拖放一个CheckBox,并设置为未选中状态:
    ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/c02e65e389f74a70b788af2e3f126c2a.png
  • 再拖放一个Text Edit,并设置为不可用状态:
    在这里插入图片描述
  • 设置第一个CheckBoxLine Edit绑定,选中如下:
    在这里插入图片描述
  • 设置第二个CheckBoxText Edit,选中如下:
    在这里插入图片描述
  • 设置完后如下:
    在这里插入图片描述
  • 保存为test015_Sianal_Slot.ui并转成test015_Sianal_Slot.py
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test015_Sianal_Slot.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(794, 584)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 70, 101, 31))
        self.pushButton.setObjectName("pushButton")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setEnabled(True)
        self.checkBox.setGeometry(QtCore.QRect(280, 170, 111, 21))
        self.checkBox.setTabletTracking(False)
        self.checkBox.setChecked(True)
        self.checkBox.setObjectName("checkBox")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(430, 170, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_2.setGeometry(QtCore.QRect(370, 240, 111, 31))
        self.checkBox_2.setObjectName("checkBox_2")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setEnabled(False)
        self.textEdit.setGeometry(QtCore.QRect(370, 280, 161, 81))
        self.textEdit.setObjectName("textEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 794, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "关闭窗口"))
        self.checkBox.setText(_translate("MainWindow", "CheckBox"))
        self.checkBox_2.setText(_translate("MainWindow", "CheckBox"))
  • 创建main.py并调用:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/9/25
# 文件名称:main.py
# 作用:主程序入口
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import sys
from test_case.test015_Sianal_Slot import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)
    window.show()

    sys.exit(app.exec_())

在这里插入图片描述

  • 效果演示:
    在这里插入图片描述
目录
相关文章
|
编译器
(9)Qt中信号与槽重载的解决方案
本文介绍了在Qt中处理信号与槽重载问题的三种解决方案:使用函数指针、Qt提供的QOverload类和Qt4的宏方式。
651 3
|
存储 安全 编译器
【Qt 底层机制之信号和槽 】深入探究Qt信号和槽背后的原理
【Qt 底层机制之信号和槽 】深入探究Qt信号和槽背后的原理
3413 4
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
241 0
|
安全 编译器 开发者
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
620 0
(8)Qt中的自定义信号
本文介绍了如何在Qt框架中创建和使用自定义信号,并通过一个父子窗口切换的示例来展示自定义信号的实现和应用。
410 3
(8)Qt中的自定义信号
|
安全 C++ Windows
Qt信号与槽机制
Qt信号与槽机制
260 1
|
12月前
|
传感器 安全
第四问:QT中信号和槽原理
Qt的信号与槽机制是观察者模式的典型实现,允许对象间通信而不直接依赖。信号用于通知事件发生,槽是响应信号的函数,通过`QObject::connect()`连接。这种机制实现了松耦合、灵活扩展和自动通知,适用于UI更新和数据绑定等场景。
|
C++
003 Qt_信号和槽-上
本文介绍了Qt中的信号与槽机制,包括信号和槽的概念、本质及连接方法,并演示了如何自定义槽函数。信号是事件的体现,槽是对信号的响应函数。通过信号与槽,可以将独立的控件关联起来,实现复杂的交互逻辑。文中还详细展示了如何在Qt项目中定义和使用槽函数,通过实例代码和图形化界面操作,帮助读者更好地理解和应用这一机制。
295 1
003 Qt_信号和槽-上
|
程序员 C++
【Qt】信号与槽(下)
【Qt】信号与槽(下)
|
Linux C++
【Qt】信号与槽(上)
【Qt】信号与槽(上)
【Qt】信号与槽(上)

推荐镜像

更多
  • qt