2015-05-27 4 views
0

Как изменить фильтр на огонь, когда пользователь нажимает и удерживает, а не просто нажимает? У меня что-то работает, но он не содержится полностью в фильтре, и он становится беспорядочным. Я не могу понять, как определить, является ли пользователь держит кнопку в течение некоторого установленного времени без блокирования потока пользовательского интерфейсаQT Фильтр событий для удержания кнопки мыши

def holdable(widget):  
    class Filter(QObject):  
     clicked = pyqtSignal()   
     def eventFilter(self, obj, event):   
      if obj == widget: 
       if event.type() == QEvent.MouseButtonPress: 
        if obj.rect().contains(event.pos()): 
         self.clicked.emit() 
         return True 
      return False  
    filter = Filter(widget) 
    widget.installEventFilter(filter) 
    return filter.clicked 

ответ

1

Это было не так трудно, как только я подумал об этом, но здесь это

def holdable(widget): 
    class Filter(QObject):  
     clicked = pyqtSignal(QWidget)   
     def eventFilter(self, obj, event):   
      if obj == widget: 
       if event.type() == QEvent.MouseButtonPress: 
        if obj.rect().contains(event.pos()): 
         obj.heldDown = datetime.datetime.now() 
         #return True  
       elif event.type() == QEvent.MouseButtonRelease: 
        if obj.rect().contains(event.pos()): 
         if(obj.heldDown): 
          diff = datetime.datetime.now() - obj.heldDown 
          obj.heldDown = None 
          if(diff.total_seconds() > 1):         
           self.clicked.emit(obj) 
           return True   
      return False  
    filter = Filter(widget) 
    widget.installEventFilter(filter) 
    return filter.clicked 

и вы повесьте его на виджете, делая это:

holdable(widgetinstance).connect(self.holdingCallback)

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