第五篇--为组件的内建信号编写槽函数(代码片段)

smart-zihan smart-zihan     2023-04-05     202

关键词:

学习书籍《Python Qt GUI与数据可视化编程》

上一节学习的是内部自带的槽函数,这一节学习自己为组件编写槽函数。

回忆一下上一节的图

技术图片

我们把确定按钮绑定了accept()函数,把退出按钮绑定了close()函数。接下来,我们来看一下清空按钮。

清空:

首先在__init__()里将其绑定一个函数

self.ui.btnClear.clicked.connect(self.clear_text)

其次在myDialog类中编写clear_text()函数

技术图片
    def clear_text(self):
        self.ui.plainTextEdit.clear()
View Code

 

这样清空按钮的功能就实现了。

提示:如果函数按照on_<object name>_<signal name>(<signal parameters>)命名的话,那么就可以省略绑定函数那一步。如果不绑定,那为什么函数和相应界面组件的信号关联起来了呢,秘密在于Dialog.py文件中的Ui_Dialog.setupUi()函数的最后一行语句

QtCore.QMeteObject.connectSlotsByName(Dialog),使用了Qt的元对象(QMetaObject),它会搜索Dialog窗体上的所有从属组件,将匹配的信号和槽函数关联起来。比如清空按钮槽函数取名为on_btnClear_clicked()。

其他部分类似

myDialog.py

技术图片
# # 与UI窗体类对应的业务逻辑类
import sys
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt, pyqtSlot
from Dialog import Ui_Dialog


class QmyDialog(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类构造函数,创建QWidget窗体
        self.ui = Ui_Dialog()  # 创建UI对象
        self.ui.setupUi(self)  # 构造UI

        # ///////////// 自行添加的部分 /////////////

        """
        这部分如果是按照槽函数命名规则命名的,可以注释掉,如果是自己命名的,那么需要加上。
        命名规则:on_<object name>_<signal name>(<signal parameters>)
        如清空按钮就是:on_btnClear_clicked
        """
        # ==================================================================
        # # 添加下划线
        # self.ui.chkBoxUnder.clicked.connect(self.on_chkBoxUnder_clicked)
        #
        # # 修改编辑框中字体为斜体
        # self.ui.chkBoxItalic.clicked.connect(self.on_chkBoxItalic_clicked)
        #
        # # # 修改编辑框中字体为斜体
        # # self.ui.chkBoxItalic.toggled.connect(self.on_chkBoxItalic_toggled)
        #
        # # 添加加粗效果
        # self.ui.chkBoxBold.toggled.connect(self.on_chkBoxBold_toggled)
        #
        # # 添加clear效果
        # self.ui.btnClear.clicked.connect(self.on_btnClear_clicked)
        # ==================================================================

        # 设置颜色关联函数
        self.ui.radioBlack.clicked.connect(self.do_setTextColor)
        self.ui.radioRed.clicked.connect(self.do_setTextColor)
        self.ui.radioBlue.clicked.connect(self.do_setTextColor)

    # #//////////////////自定义槽函数////////////////////

    # 设置文本颜色
    def do_setTextColor(self):
        plet = self.ui.plainTextEdit.palette()   # 获取palette
        if(self.ui.radioBlack.isChecked()):
            plet.setColor(QPalette.Text, Qt.black)
        elif(self.ui.radioRed.isChecked()):
            plet.setColor(QPalette.Text, Qt.red)
        elif(self.ui.radioBlue.isChecked()):
            plet.setColor(QPalette.Text, Qt.blue)
        self.ui.plainTextEdit.setPalette(plet)

    # 将编辑框里面的文字添加下划线
    def on_chkBoxUnder_clicked(self):
        checked = self.ui.chkBoxUnder.isChecked()  # 读取勾选状态
        font = self.ui.plainTextEdit.font()
        font.setUnderline(checked)
        self.ui.plainTextEdit.setFont(font)

    # @pyqtSlot(bool)
    # # 将编辑框里面的文字变为斜体
    # def on_chkBoxItalic_clicked(self, checked):
    #     # checked = self.ui.chkBoxItalic.isChecked()
    #     font = self.ui.plainTextEdit.font()
    #     font.setItalic(checked)
    #     self.ui.plainTextEdit.setFont(font)

    # 将编辑框里面的文字变为斜体
    def on_chkBoxItalic_clicked(self):
        checked = self.ui.chkBoxItalic.isChecked()
        font = self.ui.plainTextEdit.font()
        font.setItalic(checked)
        self.ui.plainTextEdit.setFont(font)

    # # 将编辑框里面的文字变为斜体
    # def on_chkBoxItalic_toggled(self, checked):
    #     # checked = self.ui.chkBoxItalic.isChecked()
    #     font = self.ui.plainTextEdit.font()
    #     font.setItalic(checked)
    #     self.ui.plainTextEdit.setFont(font)

    # 将编辑框里面的内容加粗
    def on_chkBoxBold_toggled(self, checked):
        font = self.ui.plainTextEdit.font()
        font.setBold(checked)  # 参数checked表示勾选状态
        self.ui.plainTextEdit.setFont(font)

    # 清除编辑框里面的内容函数
    def on_btnClear_clicked(self):
        self.ui.plainTextEdit.clear()


if __name__ == "__main__":
    app = QApplication(sys.argv)  # 创建app,用QApplication类
    form = QmyDialog()
    form.show()
    sys.exit(app.exec_())
View Code

 

 

注意,代码中关于斜体部分,举了3种方式,都可以实现其效果,其中有一种是@pyqtSlot(bool),这是overload型信号

overload型信号的处理,在QCheckBox类组件中,有两个名称为clicked的信号,一个是不带参数的clicked()信号,使用这个信号生成槽函数是可以自动关联的;另一个是带参数的clicked(bool)信号,它将复选框的当前勾选状态作为参数传递给槽函数。这种名称相同但参数个数或类型不同的信号就是overload型信号。connectSlotsByName()函数进行信号与槽函数的关联时会使用一个默认的信号,对QCheckBox来说,默认使用的是不带参数的clicked()信号,而如果定义on_chkBoxItalic_clicked(self,checked)是需要传递进来一个参数的,那么如果想要使用这个槽函数,就需要使用@pyqtSlot修饰符,用这个修饰符将函数的参数类型声明清楚。,这样,connectSlotsByName()函数就会自动使用clicked(bool)信号与这个槽函数关联,运行就没问题。

 

具体如何编写信号与槽(代码片段)

在Qt中,编写信号与槽一般需要以下步骤:1.定义信号和槽函数在QObject及其子类中定义信号和槽函数。信号一般定义为无返回值、void类型的函数,并使用signals关键字声明;槽函数定义为无返回值、void类型的函数,并使用slots关... 查看详情

python第五课函数(代码片段)

5.1什么是函数函数其实就是将一些需要经常执行和运用的代码进行整合打包起来,当需要用的时候直接调用即可,无需再花时间进行重新编写,这样可以加快开发项目的进度,缩短项目的开发周期。python也给我们... 查看详情

第五篇:函数(代码片段)

   本篇介绍什么是函数、函数的特性、函数的定义、函数的调用、以及函数的参数、以及关于全局变量和局部变量的使用等等。一、什么是函数:  函数是最基本的一种代码抽象方式,为了实现某种特定的功能而组织的... 查看详情

一文搞懂python的内建函数,自己添加一个print函数(代码片段)

目录1、什么是内建函数?2、内置的内建函数多有哪些?3、特殊函数说明3.1exec3.2eval3.3compile3.4globals和locals4、自己增加一个内置函数5、总结写python的同学应该都用过print函数,这个函数我们没有定义为什么可以调用... 查看详情

qt信号槽

...码,不再需要声明定义槽函数了。 关于connect函数的第五个参数:有五种类型:Qt::AutoConnection 自动关联 (默认)  如果接受者和发送者在同一个线程,则使用Qt::DirectConnection,否则使用Qt::QueuedConnection。 在... 查看详情

第五篇:路由网关(zuul)(代码片段)

在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统。在SpringCloud微服务系统中,一种... 查看详情

第五篇:数据是如何在react组件之间流动的?(下)(代码片段)

在上个课时,我们掌握了React数据流方案中风格相对“朴素”的Props单向数据流方案,以及通用性较强的“发布-订阅”模式。在本课时,我们将一起认识React天然具备的全局通信方式“ContextAPI”,并对Redux的设计思... 查看详情

第五篇:数据是如何在react组件之间流动的?(下)(代码片段)

在上个课时,我们掌握了React数据流方案中风格相对“朴素”的Props单向数据流方案,以及通用性较强的“发布-订阅”模式。在本课时,我们将一起认识React天然具备的全局通信方式“ContextAPI”,并对Redux的设计思... 查看详情

qt信号与槽函数问题

...,也可以异步触发。当你进行connect的时候,实际上还有第五个参数(可以自己看SDK的介绍)。如果说是默认的,那么要看信号和槽是否属于同一个线程(这里,你可以简单理解为是否是同一个类),然后根据connect的第五个属性... 查看详情

测开之函数进阶篇・第五篇《递归函数纯函数匿名函数偏函数》(代码片段)

目录递归函数递归函数的定义定义递归函数纯函数纯函数的概念纯函数的3个原则函数的副作用python常用的内置函数匿名函数三步运算符偏函数偏函数的定义偏函数的案例递归函数递归函数的定义在函数中调用函数自身,我们... 查看详情

一文搞懂python的内建函数,自己添加一个print函数(代码片段)

目录1、什么是内建函数?2、内置的内建函数多有哪些?3、特殊函数说明3.1exec3.2eval3.3compile3.4globals和locals4、自己增加一个内置函数5、总结写python的同学应该都用过print函数,这个函数我们没有定义为什么可以调用... 查看详情

举例说一些内建函数

...接使用的。我们常见的运算符也是内建函数大于>对应的内建比较函数为__gt__()大于等于>=对应的内建比较函数为__ge__()等于==对应的内建比较函数为__eq__()小于<对应的内建比较函数 查看详情

python基本的信号与槽函数的使用信号发射槽函数接收(代码片段)

#熟悉信号与槽的使用#-*-coding:utf-8-*-fromPyQt5.QtWidgetsimport*fromPyQt5.QtCoreimport*importsys#创建信号类classQTypeSigner(QObject):#定义一个信号sendmsg=pyqtSignal(object)def__init__(self):super(QTypeSigner,self).__ 查看详情

qt槽函数获取信号发送对象(代码片段)

Qt在槽函数中获取信号发送对象Qt中提供了一个函数qobject_cast(QObject*object),可以通过这个函数判断信号发出对象Qt帮助文档的解释:ReturnsthegivenobjectcasttotypeTiftheobjectisoftypeT(orofasubclass);otherwisereturnsnullptr.Ifobjectisnullptrthenitwilla 查看详情

pytorch学习笔记第五篇——训练分类器(代码片段)

文章目录1.数据2.训练图像分类器2.1加载并标准化CIFAR102.2训练图像3.定义卷积神经网络、损失函数、优化器、训练网络和保存模型4.测试自己的模型5.在GPU上进行训练1.数据通常,当您必须处理图像,文本,音频或视频... 查看详情

scala中的控制结构(代码片段)

...为是计算值的过程,所以作为函数式编程语言的一个组件,这些内建控制结构也不例外。  如果不好理解函数式 查看详情

qtconnect函数的第五个参数

...一种函数,通常使用的时候都是使用四个参数,但它还有第五个参数,只是一般都是使用的是默认参数。Qt::AutoConnection:默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::Di... 查看详情

字符串的内建函数

Python的字符串内建函数Python的字符串常用内建函数如下: 序号方法及描述1capitalize()将字符串的第一个字符转换为大写2center(width,fillchar)返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认为空格。3count(str,beg=0,... 查看详情