¿Cómo puedo capturar todos los eventos de ratón en un widget descendido de un widget de Qt en PyQt?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

En particular, estoy heredando de QCalendarWidget y quiero reemplazar el método mousePressEvent para filtrar lo que fechas se les permite ser seleccionado (conjunto disjuntos, no una gama simple). Pero cuando puedo reemplazar el método, no captura los eventos que van a widgets hijos dentro del calendario. ¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Me sorprende que anulando mousePressEvent no funciona para un QCalendarWidget. Funciona para la mayoría de los otros widgets. Después de buscar en la documentación para QCalendarWidget, noto que hay una señal se ha hecho clic. Si se conecta de que funciona.

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_()

Nunca había comprobado a cabo QCalendarWidget antes. widget pequeño y muy dulce.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top