八月 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_())


文章由安静原创,发表于www.ajnote.com。转载请注明出处

发表 2020年8月24日 自 anjing 类别 "Pyside2学习笔记

发表评论

电子邮件地址不会被公开。 必填项已用*标注