代码编织梦想

GitHub连接:
本专栏所有源代码的GitHub直通车

上一篇已经讲了如何使用QTdesigner生成ui文件并转化为py文件,最终实现界面代码分离的效果

信号与槽作是 QT 的核心机制,是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。它为高层次的事件处理自动生成所需要的附加代码。例如在tkinter模块中一个空间 都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在 QT 中信号和槽取代了这些函数指针。

所有 QObject 类都可以使用信号槽,继承自 pyqt 中的类基本上都可以使用信号槽机制。

目前可以理解为:信号就是时间的触发,然后将这个信号与槽(另一个事件,可能为其它对象的)连接,比如说:我点击一个按钮就会将窗口关闭,这个时候按钮的点击事件就是一个信号,而窗口关闭则是槽接收信号之后处理的时间。具体的看下面的例子。

简单的实现槽有两种方式。第一种就是在QTdesigner中设计好信号与槽,另一个就是用代码实现连接。

第一种:
在QTdesigner中实现信号和槽的连接
这个按钮可以开始信号与槽的配置

在这里有两个对象:pushbutton按钮和form窗口,从按钮处单击拉一条线到form任意地方就指定了信号将会从pushbutton产生发送给form这个对象。连接完之后,弹出的窗口就是配置信号的界面,我这里给push配置的信号就是单击事件,然后form对象接收到之后会运行closed函数,这个时候窗口就会关闭。
在这里插入图片描述

下面这张图就可以很清楚的知道信号和槽之间的关系,还有发送者与接受者
在这里插入图片描述

QTdesigner生成的py代码:
在QTdesigner中的连线体现在 self.pushButton.clicked.connect(Form.close)这行代码。

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

# Form implementation generated from reading ui file '02.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# 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_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(748, 523)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(90, 160, 75, 23))
        self.pushButton.setObjectName("pushButton")

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "pushButton"))

主文件代码:

from ui2 import Ui_Form#导入在QTdesigner设计好的 ui.py 文件
import sys
from PyQt5 import QtWidgets


class mydesigner(QtWidgets.QWidget,Ui_Form):
    def __init__(self):
        super(mydesigner,self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.signaltest)
    def signaltest(self):
        print("haomingHu")

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myshow = mydesigner()
    myshow.show()
    sys.exit(app.exec_())

代码实现连接也是很简单,先明确一点就是这个槽可以是对象的固有成员函数也可以是自定义的函数,这个自定义函数可以是类的也可以是单独的。

        self.pushButton.clicked.connect(self.signaltest)
    def signaltest(self):
        print("haomingHu")

就是自定义了一个打印函数,当点击pushbutton按钮的时候,可以将按钮的click信号发送给form,接收到之后就可以去执行绑定的事件。(使用的函数是connect函数,绑定的函数不需要使用(),只需要一个函数名)
question:如果需要传参数怎么办? 这个有一点点绕,这个后面捋清楚请来补充或者放在下一篇讲述。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_44296793/article/details/111084821

常见数据结构线性表(数组和链表)python实现-爱代码爱编程

数组 数据在内存中顺序存储,可以通过下标索引。 特点:支持随机访问,索引元素效率高,插入元素和删除元素效率低。 数组存放空间连续,插入元素时需要将插入位置及后面的元素一次往后移动一位,然后将元素插入到空出的插入位置。 python中的list是一个动态数组,支持动态扩容(2^n),list中封装了数组常用的方法: >>> lis

Python自动登录淘宝-爱代码爱编程

淘宝自动登录,并提交订单,手机完成支付 说明:闲来无事,学习使用 前期准备工作: 浏览器:谷歌浏览器;Python环境下载安装相应版本的浏览器驱动器(按照以下链接操作即可) https://jingyan.baidu.com/article/fedf073711771274ac8977f7.htmlPyCharm编辑器from selenium imp

NLP笔记:常用loss function整理-爱代码爱编程

NLP笔记:常用loss function整理 1. 简介2. loss function整理 1. MSE(Mean Square Error)2. MAE(Mean Abosolute Error)3. CrossEntropy4. KLDivergence5. Regularization3. 总结4. 参考链接1. 简介 接上一篇

python基础(4)函数用法-爱代码爱编程

学习内容 1.函数形参与实参 2.返回值 3.传递列表 4.传递任意数量实参 5.将函数存储在模块中 一.函数的形参和实参 首先,先介绍一个简单的问候语函数: def greet_user(): """显示简单的问候语""" print("Hello!") greet_user() 运行结果为: Hello! 在上面我

python-CrawlSpider爬取名人名言-爱代码爱编程

爬取名人名言(http://quotes.toscrape.com) import scrapy from scrapy.spiders import CrawlSpider,Rule from scrapy.linkextractors import LinkExtractor class Quotes(CrawlSpider): name

深入浅出Java架构JVM+Tomcat+Dubbo+Rabbit MQ线程关系-爱代码爱编程

文章目录 一、基础概念二、进程和线程关系(进程和线程都是CPU工作时间段的描述)1、进程概念2、线程概念3、进程和线程区别(资源管理方式不同)4、进程和线程的优缺点5、进程和线程的关系三、它们的线程数关系(java应用)1、存在形式和之间的关系( jvm ←→ tomcat < dubbo , mq client > ←→ mq ser

(2)pyqt5教程--->使用QTdesigner实现界面代码分离-爱代码爱编程

GitHub连接:本专栏所有源代码的GitHub直通车 在上一篇中已经讲了一个pyqt5的基本框架是什么,这篇使用QTdesigner来设计一下界面第一篇:pyqt5的基本框架 1、QTdesigner QTdesigner是一个GUI可视化设计软件,我就没有在Python的那个pyqt5 tools里面下,我是通过安装QT5.9.8来获得的,因为后

PyQt常用控件的组合使用-爱代码爱编程

写作思路 这次使用到的空间有以下几种: 1、QPushButton 是我们之前用的按钮,也可以当作Toggle用 2、QCheckBox 3、QSlider 4、QCalendarWidget 5、QProgressBar 效果如下,可以改变QFrame的颜色,只有选中了对应Toggle才能改变对应的颜色通道,CheckBox可以控制Slider是否显示

pyqt5 使用pyinstaller生成.exe可执行文件-爱代码爱编程

1. 生成.exe可执行文件 需要安装的库函数: 1. wxPython 2. pywin32 3. tornado 4. ipykernel 5. pyinstaller 1. 在命令行进入要生成.exe的项目目录 2. 按顺序输入以下命令: chcp 65001 pyinstaller -F