爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10213|回复: 3

[混合编程] PyQt之信号槽学习

[复制链接]
发表于 2020-7-17 10:36:01 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 15195775117 于 2020-7-17 11:09 编辑

信号槽=信号+槽,
信号即界面控件的信号,槽就是响应函数,其实就是Qt版的“事件”。
Qt设计师中【信号槽编辑器】的内置信号槽可以设置发送控件、信号、接收控件、槽函数,
但都是些基础简单的,需要DIY的还需要自己写。

点击按钮关闭主界面的设置如下:
360截图20200717102704830.png


槽函数可以是函数,也可以是类的方法:

self.pushButton.clicked.connect(类名.方法名)
self.pushButton.clicked.connect(函数名)

解绑:
self.pushButton.clicked.disconnect(类名.方法名)
self.pushButton.clicked.disconnect(函数名)








密码修改失败请联系微信:mofangbao
 楼主| 发表于 2020-7-17 11:13:03 | 显示全部楼层
  • 一个信号可连接多个槽;一个槽可监听多个信号;
  • 信号和槽的连接可以是同步或异步;
  • 一个信号可连接另一个信号;
  • 信号参数可以是任何python类型;
  • 信号可连接可断开;
  • 信号和槽的连接可能会跨线程。




GUI编程中,点击一个按钮通常要通知另一个控件,这就是通信。


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-17 14:01:06 | 显示全部楼层
本帖最后由 15195775117 于 2020-7-20 09:33 编辑

单参数和多参数的信号槽通信的主要区别在于定义和使用(以下代码红色部分)

单参数的信号槽通信
from PyQt5.QtCore import QObject,pyqtSignal

class QTypeSignal(QObject):#信号对象
    sendmsg=pyqtSignal(object)#定义信号
    def __init__(self):
        super(QTypeSignal,self).__init__()
    def run(self):
        self.sendmsg.emit('Hello Pyqt5')#发射信号

class QTypeSlot(QObject):#槽对象
    def __init__(self):
        super(QTypeSlot,self).__init__()
    def get(self,msg):#槽函数
        print("QSlot get msg =>"+msg)

if __name__ == '__main__':
    send = QTypeSignal()
    slot = QTypeSlot()
    send.sendmsg.connect(slot.get)#信号绑定到槽函数
    send.run()
    send.sendmsg.disconnect(slot.get)#断开槽函数
    send.run()

多参数的信号槽通信
from PyQt5.QtCore import QObject,pyqtSignal

class QTypeSignal(QObject):#信号对象
    sendmsg=pyqtSignal(str,str)#定义信号与参数类型
    def __init__(self):
        super(QTypeSignal,self).__init__()
    def run(self):
        self.sendmsg.emit('第一个参数','第二个参数')#发射信号

class QTypeSlot(QObject):#槽对象
        def __init__(self):
                super(QTypeSlot,self).__init__()
        def get(self,msg1,msg2):#槽函数
                print("QSlot get msg =>"+msg1+' '+msg2)

if __name__ == '__main__':
    send = QTypeSignal()
    slot = QTypeSlot()
    send.sendmsg.connect(slot.get)#信号绑定到槽函数
    send.run()
    send.sendmsg.disconnect(slot.get)#断开槽函数
    send.run()  

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-20 09:09:49 | 显示全部楼层
本帖最后由 15195775117 于 2020-7-20 09:10 编辑

定义信号是很简单的:
定义无参信号:pyqtSignal()
定义1个参数的信号:pyqySignal(x)
定义2个参数的信号:pyqySignal(x,y)





密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表