Pyside事件过滤器及处理None或缺失属性的情况

0 投票
1 回答
2447 浏览
提问于 2025-04-18 16:21

我在我的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

撰写回答