Comment puis-je capturer tous les événements de la souris dans un widget descendant d'un widget Qt en PyQt?

StackOverflow https://stackoverflow.com/questions/1716916

  •  19-09-2019
  •  | 
  •  

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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top