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

 Смежные вопросы

  • Нет связанных вопросов^_^