Comment puis-je capturer tous les événements de la souris dans un widget descendant d'un widget Qt en PyQt?
Question
En particulier, je suis héritant de QCalendarWidget et je veux remplacer la méthode mousePressEvent pour filtrer les dates sont autorisés à sélectionner (ensemble disjoint, pas une gamme simple). Mais quand je substituez la méthode, il ne saisit pas tous les événements qui vont des widgets enfants à l'intérieur du calendrier. Comment puis-je faire?
La solution
Je suis surpris que l'annulation de mousePressEvent ne fonctionne pas pour un QCalendarWidget. Il fonctionne pour la plupart des autres widgets. Après avoir examiné les documents pour QCalendarWidget, je remarque qu'il ya un signal clicked. Si vous vous connectez que cela fonctionne.
import sys
from PyQt4 import QtGui, QtCore
class MyCalendar(QtGui.QCalendarWidget):
def __init__(self):
QtGui.QCalendarWidget.__init__(self)
self.connect(self, QtCore.SIGNAL("clicked(QDate)"), self.on_click)
self.prev_date = self.selectedDate()
def on_click(self, date):
if self.should_ignore(date):
self.setSelectedDate(self.prev_date)
return
self.prev_date = date
def should_ignore(self, date):
""" Do whatever here """
return date.day() > 15
app = QtGui.QApplication(sys.argv)
cal = MyCalendar()
cal.show()
app.exec_()
Je ne l'avais jamais vérifié QCalendarWidget avant. petit widget assez doux.