Pyside事件过滤器及处理None或缺失属性的情况
我在我的Label类中设置了一个事件过滤器,它可以正常工作,但当没有必要的属性时会出现错误。
我应该怎么检查这些属性是否存在呢?比如在这种情况下:Event.Buttons()。
self.installEventFilter(self)
# Handles mouse events
def eventFilter(self, object, event):
if event.buttons() == QtCore.Qt.LeftButton:
print ('QtGui.QCursor.pos()')
1 个回答
1
你可以通过使用 hasattr
来检查是否有 buttons
这个属性,方法如下:
if hasattr(event, "buttons"):
if event.buttons() == QtCore.Qt.LeftButton:
print ('QtGui.QCursor.pos()')
另一种更“符合Python风格”的方法是通过捕获异常,具体做法如下:
try:
if event.buttons() == QtCore.Qt.LeftButton:
print ('QtGui.QCursor.pos()')
except AttributeError:
pass # Or do something about it
需要注意的是,hasattr
在内部也是这样实现的,也就是说,它会尝试调用 getattr
,如果抛出了异常,就会返回 False
。