2016-12-15 28 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)