1
特别是,我从QCalendarWidget继承,我想重写mousePressEvent方法来筛选允许选择哪些日期(不相交的集合,而不是简单的范围)。但是,当我重写该方法时,它不会捕获任何要发送到日历中的子窗口小部件的事件。我怎样才能做到这一点?如何捕获PyQt中Qt小部件后代的小部件中的所有鼠标事件?
特别是,我从QCalendarWidget继承,我想重写mousePressEvent方法来筛选允许选择哪些日期(不相交的集合,而不是简单的范围)。但是,当我重写该方法时,它不会捕获任何要发送到日历中的子窗口小部件的事件。我怎样才能做到这一点?如何捕获PyQt中Qt小部件后代的小部件中的所有鼠标事件?
令人惊讶的是,重写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。非常可爱的小部件。