今天遇到一个问题,事件源使用connect绑定方法的时候,找不到事件源,通过在网上找到源码,我归纳总结一下。
需求,假设两个控件需要绑定同一个方法触发事件,实现的代码几乎一样,这样的情况下,只需要判断事件源就可以了。
源代码:
self.btnComment = QCheckBox('开启', self)
self.btnComment.setObjectName('commentOK')
self.btnComment.stateChanged.connect(self.changeTitle)
self.cb = QCheckBox('手机', self)
self.cb.setObjectName('phoneOK')
self.cb.stateChanged.connect(self.changeTitle)
两个QCheckBox绑定了同一个方法changeTitle
那么只需在changeTitle里面找到事件源就可以了
def changeTitle(self):
source = self.sender()
print(source.objectName())
# 获取事件源
objectName = source.objectName()
# 如果事件源是手机的话
if objectName=='phoneOK':
# 如果选中的话
elif objectName=='commentOK':
# 如果选中的话
关键代码是source = self.sender()
其实也可以根据text()方法来判断是哪个事件源,但是我觉得使用objectname比较规范一点。