信号与槽
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())