PyQt4鼠标移动事件:查找小部件

时间:2016-12-15 17:28:41

标签: python-3.x pyqt4 mouseevent

如何找到触发了哪个小部件?该位置相对于其下方的任何小部件的原点。我想将事件限制在一个wiget。

def eventFilter(self, source, event):
    if event.type() == QtCore.QEvent.MouseMove:
        if event.buttons() == QtCore.Qt.NoButton:
            pos = event.pos()
            self.statusbar.showMessage("mouse tracked at {} x {}".format(pos.x(), pos.y()))
            print(dir(event))
            # self.edit.setText('x: %d, y: %d' % (pos.x(), pos.y()))
    return QtGui.QMainWindow.eventFilter(self, source, event)

1 个答案:

答案 0 :(得分:1)

通过eventFilter传递的事件仅限于显式安装事件过滤器的窗口小部件。如果只有一个小部件安装了事件过滤器,则source参数只能是一个小部件。

如果多个小部件在同一个过滤对象上安装了事件过滤器,您可以使用身份检查来区分它们:

def eventFilter(self, source, event):
    if (event.type() == QtCore.QEvent.MouseMove and
        event.buttons() == QtCore.Qt.NoButton and
        source is self.myInterestingWidget):
        # do stuff with event...
        print(event.pos())
    return QtGui.QMainWindow.eventFilter(self, source, event)