• GUI学习之n——自定义信号


    PyQt中是依靠信号——槽的机制来运行,可是有些时候需要我们定义一下些新的信号以满足使用要求,例如按钮是没有右击的效果,那我们怎么创建一个新的信号呢?

    首先要注意,新的信号是要以类属性的形式来定义

    class BTN(QPushButton):
        rightClicked = pyqtSignal()    #类属性,建立新信号
        def __init__(self,*args,**kargs):
            super().__init__(*args,**kargs)

    如果想要在信号中传递参数,就在定义信号的时候定义好参数的数据类型,比如我们想在点击右键的时候发送字符串‘右键被单击’

    class BTN(QPushButton):
        rightClicked = pyqtSignal(str)    #类属性,建立新信号
        def __init__(self,*args,**kwargs):
            super().__init__(*args,**kwargs)
    
        def mousePressEvent(self, evt):
            super().mousePressEvent(evt)       #非常重要,要先继承否则就成重构方法了
            if evt.button() == 2:              #鼠标右键对应button映射值为2
                self.rightClicked.emit('右键被单击')    #发射信号并传递参数

    一定要注意在重构事件的时候先继承,否则就成完全重构了。如果把继承这一行注释掉以后,鼠标左键单击就没有事件了。

    注意这里用了个很重要的方法

    sign.emit()   #发送信号

    有些信号使用时会被重载,传递的参数可以是不同类型的,使用时候需要选择信号数据类型,这时候要这样定义

    class BTN(QPushButton):
        rightClicked = pyqtSignal([str],[int])    #类属性,建立新信号,指定参数类型
        def __init__(self,*args,**kwargs):
            super().__init__(*args,**kwargs)
    
        def mousePressEvent(self, evt):
            super().mousePressEvent(evt)       #非常重要,要先继承否则就成重构方法了
            if evt.button() == 2:              #鼠标右键对应button映射值为2
                self.rightClicked[int].emit(123)    #发射信号并传递参数
                self.rightClicked[str].emit('右键被单击')

    调用的时候就可以指名数据类型了

    btn.rightClicked[str].connect(lambda val:print(val))#实例化后调用

    还有一种情况是同时传递多个参数(带多个参数的时候也可以包含上面那种情况)

    class BTN(QPushButton):
        rightClicked = pyqtSignal([str],[int,list])    #类属性,建立新信号,指定参数类型
        def __init__(self,*args,**kwargs):
            super().__init__(*args,**kwargs)
    
        def mousePressEvent(self, evt):
            super().mousePressEvent(evt)       #非常重要,要先继承否则就成重构方法了
            if evt.button() == 2:              #鼠标右键对应button映射值为2
                self.rightClicked[int,list].emit(123,[1,2,3,4,5])    #发射信号时传递多个参数
                self.rightClicked[str].emit('右键被单击')
  • 相关阅读:
    Tesseract-OCR
    chrome浏览器插件推荐
    安装配置sublime Text 3 快捷键方式
    远程桌面与远程控制
    一个C#的XML数据库访问类
    WPF小程序:贪吃蛇
    恐惧源于一知半解
    8条佛曰 66句禅语
    自动开机 双网卡网络唤醒
    C#,Java,C++中的finally关键字
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/11674946.html
Copyright © 2020-2023  润新知