信号和槽是PyQt编程对象之间进行通信的机制。每个继承自QWideget的控件都支持信号与槽机制。信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理)。本文主要讲述信号和槽最基本、最经常使用方法。就是内置信号和槽的使用的使用方法。

内置信号和槽

所谓内置信号与槽的使用。是指在发射信号时,使用窗口控件的函数,而不是自定义的函数。信号与槽的连接方法是通过QObject.signal.connect将一个QObject的信号连接到另一个QObject的槽函数。

在任何GUI设计中,按钮都是最重要的和常用的触发动作请求的方式,用来与用户进行交互操作。常见的按钮包括QPushButton、QRadioButton和QCheckBox。这些按钮都继承自QAbstractButton类,QAbstractButton提供的信号包括:

Clicked:鼠标左键点击按钮并释放触发该信号。最常用。记住这个就差不多够了。

Pressed:鼠标左键按下时触发该信号

Released:鼠标左键释放时触发该信号

Toggled:控件标记状态发生改变时触发该信号。

内置信号和槽使用实例

这里实现一个点击按钮退出界面需求实现过程来介绍内置信号和槽。开始动手。。。

Step1:打开Qt Designer,选择Widget模板。在工具箱中拖动Push Button控件按钮到主界面。并修改控件显示名称。保存为singal.ui。界面如下:

Step2:使用pyuic5 -o singal.py singal.ui转换成.py格式。

Step3:为考虑介绍方便,将调用程序在singal.py中主程序。其中MyMainForm类中的命令行为Push Button按钮点击信号添加槽函数。如下

self.pushButton.clicked.connect(self.close)

完整代码如下(可直接拷贝运行,字体加粗部分为添加部分):

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'signal.ui'#

# Created by: PyQt5 UI code generator 5.11.3#

# WARNING! All changes made in this file will be lost!import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBoxclass Ui_Form(object):def setupUi(self, Form):

Form.setObjectName("Form")

Form.resize(431, 166)

self.pushButton = QtWidgets.QPushButton(Form)

self.pushButton.setGeometry(QtCore.QRect(160, 50, 91, 41))

font = QtGui.QFont()

font.setFamily("YaHei Consolas Hybrid")

font.setPointSize(14)

self.pushButton.setFont(font)

self.pushButton.setObjectName("pushButton")

self.retranslateUi(Form)

QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):

_translate = QtCore.QCoreApplication.translate

Form.setWindowTitle(_translate("Form", "信号与槽"))

self.pushButton.setText(_translate("Form", "关闭"))class MyMainForm(QMainWindow, Ui_Form):def __init__(self, parent=None):

super(MyMainForm, self).__init__(parent)

self.setupUi(self)

self.pushButton.clicked.connect(self.close)if __name__ == "__main__":

app = QApplication(sys.argv)

myWin = MyMainForm()

myWin.show()

sys.exit(app.exec_())

运行并点击如下按钮就可以关闭窗口

内置信号和自定义槽使用实例

实现过程同上述步骤一样。槽函数showMsg为自定义函数。

信号与槽:self.pushButton.clicked.connect(self.showMsg)

完整代码如下(可直接拷贝运行,字体加粗部分为添加部分):

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'signal.ui'#

# Created by: PyQt5 UI code generator 5.11.3#

# WARNING! All changes made in this file will be lost!import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBoxclass Ui_Form(object):def setupUi(self, Form):

Form.setObjectName("Form")

Form.resize(431, 166)

self.pushButton = QtWidgets.QPushButton(Form)

self.pushButton.setGeometry(QtCore.QRect(160, 50, 91, 41))

font = QtGui.QFont()

font.setFamily("YaHei Consolas Hybrid")

font.setPointSize(14)

self.pushButton.setFont(font)

self.pushButton.setObjectName("pushButton")

self.retranslateUi(Form)

QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):

_translate = QtCore.QCoreApplication.translate

Form.setWindowTitle(_translate("Form", "信号与槽"))

self.pushButton.setText(_translate("Form", "运行"))class MyMainForm(QMainWindow, Ui_Form):def __init__(self, parent=None):

super(MyMainForm, self).__init__(parent)

self.setupUi(self)

self.pushButton.clicked.connect(self.showMsg)def showMsg(self):

QMessageBox.information(self, "信息提示框", "OK,内置信号与自定义槽函数!")if __name__ == "__main__":

app = QApplication(sys.argv)

myWin = MyMainForm()

myWin.show()

sys.exit(app.exec_())

运行结果如下:

Qt Designer添加控件信号与槽

上述介绍的内容是通过代码方式实现内置信号与槽的连接。那Qt Designer工具可以实现信号与槽的连接?之前在第二节课Qt Designer主界面介绍时提过信号槽区域。一直没有讲如何使用。通过这个区域功能是可以实现信号与槽的连接的。

还是以添加内置信号与槽来介绍。

Step1:打开Qt Designer界面,找到信号槽编辑区。如下

Step2:点击+号 Sender控件选择"PushButton"、Signal信号选择"clicked",Receiver选择"Form",内置槽函数选择"close()"

Step3:保存.ui格式,并使用pyuic转换成.py格式,添加调用程序,运行。效果一样。这些步骤都介绍过,不再重复介绍,关键代码如下:

小结

本文介绍了PyQt5信号与槽最基本的使用方法。知道如何在Qt Designer生成的.py文件中添加控件信号与槽的关系并且知道如何调用自定义槽函数。掌握了这些,应该就可以动手实现一些基本的需求了。

到这里,按照这几个章节的介绍应该可以动手完成简单需求的实现。至于更进一步的学习,可以通过实践过程中遇到的问题以及小工具开发需求去驱动加深理解可能效果会好一点。

pyqt5菜鸟教程_[ PyQt入门教程 ] PyQt5信号与槽相关推荐

  1. WMI 使用教程_.NET 入门教程

    WMI 使用教程_.NET 入门教程 先介绍一下WMI 相关知识:  什么是WMI 呢? Windows 管理规范 (Windows Management Instrumentation ),它的主要 ...

  2. python 选择文件对话框插件_[ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件/目录选择对话框...

    本文主要介绍PyQt界面实现中常用的消息弹出对话框.提供用户输入的输入框.打开文件获取文件/目录路径的文件对话框.学习这三种控件前,先想一下它们使用的主要场景: 1.消息弹出对话框.程序遇到问题需要退 ...

  3. python3.72教程_python3教程_编程入门教程_牛客网

    Python3 命令行参数 Python 提供了 getopt 模块来获取命令行参数. $ python test.py arg1 arg2 arg3 Python 中也可以所用 sys 的 sys. ...

  4. mysql程序设计教程_MySQL教程_编程入门教程_牛客网

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...

  5. jQuery教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 jQuery入门教程 - 从简单的步骤开始了解jQuery,从基本到高级概念,包括jQuery概述,基础知识,选择器,属性,遍历,CSS,DOM操作,AJAX支持,拖放,效果,事件处理,UI ...

  6. EJB教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 EJB入门教程 - 从简单的步骤了解EJB 3.0和3.1(Enterprise Java Bean)框架,从基本概念到高级概念,包括概述,环境设置,应用服务器,容器,企业Bean,注释,会 ...

  7. Perl教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Perl入门教程 - 从基本到高级概念的简单简单步骤了解Perl,包括简介,环境,语法,数据类型,变量,标量,数组,哈希,IF ... ELSE,循环,运算符,日期和时间,子程序,引用,格式 ...

  8. PHP 7 教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 PHP7入门教程 - 从简单的步骤了解PHP 7,从基本到高级概念,包括简介,性能,环境设置,标量类型声明,返回类型声明,空值合并运算符,Spaceship运算符,常量数组,匿名类,Clos ...

  9. pyqt入门教程(一)

    pyqt入门 根据pyqt5的文档改写的,加入了注释吧 虽然,用designer会更加方便,但是过于依赖designer,会导致对于代码的qt实现的理解难以加深(自以为会加深,其实已经将自己的格局给局 ...

最新文章

  1. 基于马克思哲学原理论外在美与内在美2017-12-31
  2. 【复习】原生Js实现文件上传
  3. 软件工程---4.需求工程
  4. java cpu 内存使用情况_java高cpu占用和高内存占用问题排查 (转)
  5. 机器人瓦力机械舞_25个与机器人有关的“前卫”知识,你知道几个?
  6. R语言中if语句使用方法之超详细教程
  7. MySQL实战45讲
  8. 数据库连接池 C3p0
  9. 首次主持春晚,她因太漂亮登上热搜
  10. Windows照片查看器无法显示此图片
  11. 全球与中国电力系统同步时钟市场深度研究分析报告
  12. php中rand函数怎么用,php rand函数用法是什么
  13. springsecurity与gateway网关整合配置
  14. 插件化Amigo-1
  15. 一铲子下去,服务器全瘫痪......
  16. php中的 notice,php中对于NOTICE的问题排查,该注意什么?
  17. webview性能优化—webview预创建
  18. 00无人机简介以及课程介绍2020-07-03
  19. 小甲鱼python课后题和答案简书_【py小甲鱼笔记】-函数
  20. 老男孩mysql运维dba实战21部完整版_老男孩MySQL高级专业DBA实战课程/高级运维DBA课程/MySQL视频教程 零基础全套...

热门文章

  1. Gerrit、gitlab与jenkins集成讲解
  2. HTML5 面试选题
  3. C语言(24)蛇形填数
  4. IDEA安装流程(IDEA安装步骤)
  5. OmniDet: Surround View Cameras based Multi-taskVisual Perception Network for Autonomous Driving 论文精读
  6. windows git and linux git lib operater
  7. JAVA 对接支付宝的 网页支付、当面付 工具类
  8. ArcGis10.6安装教程
  9. Android 浅谈MVP模式 一
  10. Java判断多个时间段是否重叠