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。非常可愛的小部件。