PyQt5-QObject(03)-信号与槽

信号与槽

API

widget.信号.connect(槽)         连接信号与槽。

obj.disconnect()         取消连接信号与槽。 obj可以是信号也可以是控件,当为信号时:取消指定信号的连接。当为控件时:取消控件的所有信号连接。

widget.blockSignals(bool)         临时(取消)阻止指定控件所有的信号与槽的连接。

widget.signalsBlocked()         信号是否被阻止。

widget.receivers(信号)         返回连接到信号的接收器数量。

API Dome
from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject learning")
        self.resize(500,500)
        self.setup_ui()

    def setup_ui(self):
        self.Signal_slot()

    def Signal_slot(self):
        OBJ=QObject()
        def destroyed_function(obj):
            print(obj,"对象被释放")
        def destroyed_function2(obj):
            print(obj,"对象被释放2")
        def NameChanged_function(name):
            print("改名为",name)
        OBJ.destroyed.connect(destroyed_function)	#对象释放信号连接槽
        OBJ.destroyed.connect(destroyed_function2)

        OBJ.objectNameChanged.connect(NameChanged_function)	#对象名称改变信号连接槽
        OBJ.setObjectName("AAA")

        OBJ.objectNameChanged.disconnect()
        # OBJ.disconnect()                      取消控件的所有信号连接
        OBJ.setObjectName("BBB")

        OBJ.objectNameChanged.connect(NameChanged_function)
        OBJ.setObjectName("CCC")

        OBJ.blockSignals(True)
        OBJ.setObjectName("DDD")
        print(OBJ.signalsBlocked())

        OBJ.blockSignals(False)
        OBJ.setObjectName("EEE")
        print(OBJ.signalsBlocked())

        print(OBJ.receivers(OBJ.objectNameChanged))

if __name__ == '__main__':
     app=QApplication(sys.argv)
     window=Window()
     window.show()
     sys.exit(app.exec())
    
    
Running result:
D:\mypython\Pyqt5learning\Scripts\python.exe D:/mypython/Pyqt5learning/Dome5.py 
改名为 AAA
改名为 CCC
True
改名为 EEE
False
1
<PyQt5.QtCore.QObject object at 0x00000237A6D6CDC0> 对象被释放
<PyQt5.QtCore.QObject object at 0x00000237A6D6CDC0> 对象被释放2

Process finished with exit code 0
 
应用场景
from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject learning")
        self.resize(500,500)
        self.setup_ui()

    def setup_ui(self):
        self.Signal_slot()

    def Signal_slot(self):
        self.num=0
        btn=QPushButton(self)
        lab=QLabel(self)

        btn.setText("TEST1")
        lab.setText("clicked:0")
        btn.move(100,0)
        def clicked():
            self.num=self.num+1
            lab.setText("clicked:%d"%self.num)
            lab.adjustSize()

            print("按钮被点击")
        btn.clicked.connect(clicked)


if __name__ == '__main__':
     app=QApplication(sys.argv)
     window=Window()
     window.show()
     sys.exit(app.exec())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值