Как я могу захватить все события мыши в виджете, произошедшем от виджета Qt в PyQt?
Вопрос
В частности, я наследую QCalendarWidget и хочу переопределить метод mousePressEvent, чтобы фильтровать, какие даты разрешено выбирать (непересекающийся набор, а не простой диапазон).Но когда я переопределяю этот метод, он не улавливает никаких событий, которые передаются дочерним виджетам внутри календаря.Как я могу это сделать?
Решение
Я удивлен, что переопределение mousePressEvent не работает для QCalendarWidget.Это работает для большинства других виджетов.Посмотрев документацию по QCalendarWidget, я заметил, что есть сигнал щелчка.Если подключить то работает.
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_()
Я никогда раньше не пользовался QCalendarWidget.Довольно милый виджет.
Не связан с StackOverflow