信号和槽是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. MySQL面试题 | 附答案解析(九)
  2. 【Qt】enum和QString的相互
  3. jquery animate函数实现
  4. “最害怕过周末”、“希望每天都干活”、“水电费又白交了”
  5. 5、CSS 派生选择器
  6. java爬取网页内容 简单例子(2)——附jsoup的select用法详解
  7. 阿里云设置域名解析到主机ip
  8. Django实现一个简单的中间件,不熟悉中间件的爬坑之路
  9. Emacs Lisp基本语法(六)
  10. SSH客户端:Termius for Mac
  11. CSS:公共样式(自用)
  12. 西门子PLC编程软件step7 v5.5 和仿真软件S7-Plcsim安装与授权
  13. 历史上的移民运动与宁夏地域文化【宁夏地域文化中的移民因素】
  14. JVM-Cpu飙升排查及解决
  15. 常见对象-String类
  16. newman跟newman-reporter-html安装
  17. sqrt函数,对数进行开根号
  18. 骑行318、 2016.7.29
  19. @SuppressWarnings的使用、作用、用法
  20. 结束拒绝访问的进程 cmd下结束进程 强行结束进程 1

热门文章

  1. 菜鸟演讲-----谁动了我的奶酪?
  2. unity gaia 自定义高程图无法识别解决方法
  3. 果断收藏!AI绘图文字设计指南;将文本创建为漂亮时间线;伯克利·全栈深度学习训练营课程;CMU·数据库系统系列课程;前沿论文 | ShowMeAI资讯日报
  4. python中round函数使用
  5. FreeCAD Part Design Workbench 零件设计工作台
  6. 上传镜像到DockerHub
  7. VAPS XT开发入门教程01:软件安装包
  8. Engineer-Exec02-参考解析
  9. 直播软件开发教程之在直播系统源码中设置任务奖励
  10. Python open 函数