¿Cómo puedo capturar todos los eventos de ratón en un widget descendido de un widget de Qt en PyQt?
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?
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