2016-12-15 96 views
0

如何查找哪个小部件被触发?该位置是相对于它下面的任何小部件的来源。我想限制事件只有一个wiget。PyQt4鼠标移动事件:查找小部件

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

是通过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)