八月
24
QObject信号与槽
import sys
from PySide2 import QtWidgets as qtw
from PySide2 import QtCore as qtc
# destroy信号会携带一个参数,这个参数就是被destroy的对象
def name_changed_slot(name):
print(f'对象名称改变为{name}')
def destroy_slot(obj):
print(f'{obj}对象被释放了')
app = qtw.QApplication()
window = qtw.QWidget(None)
window.resize(800, 800)
obj = qtc.QObject(None)
# 连接信号与槽
obj.objectNameChanged.connect(name_changed_slot)
obj.destroyed.connect(destroy_slot)
# 检查信号绑定的槽的数量
# 这里的参数要用SIGNAL配合信号名称获取
# 信号名称不用带上sender的名称,但是后面需要加(),否则返回0个receiver
print(obj.receivers(qtc.SIGNAL('destroyed()')))
# 触发objectNameChanged信号
obj.setObjectName('changed_name')
# 临时阻断信号
obj.blockSignals(True)
# obj.signalsBlocked返回布尔值,检测信号是否被阻断
print(obj.signalsBlocked())
obj.setObjectName('another_changed_name')
# 恢复信号连接
obj.blockSignals(False)
# 取消信号与槽的链接。如果不传参数,测取消所有链接。也可以指定取消链接的槽
obj.objectNameChanged.disconnect()
obj.setObjectName('third_changed_name')
# 删除引用,即触发obj的destroy信号
del obj
window.show()
sys.exit(app.exec_())