2009-11-11 3 views
1

특히 QCalendarWidget을 상속하고 있는데 mousePressEvent 메서드를 재정 의하여 선택 가능한 날짜를 필터링하고 싶습니다 (단순한 범위가 아닌 분리 된 집합). 그러나 메서드를 재정의하면 달력 내부에서 자식 위젯으로 이동하는 이벤트를 catch하지 않습니다. 어떻게해야합니까?PyQt의 Qt 위젯에서 유래 된 위젯에서 모든 마우스 이벤트를 캡처하는 방법은 무엇입니까?

답변

1

QCalendarWidget에 대해 mousePressEvent를 재정의하면 작동하지 않습니다. 그것은 다른 대부분의 위젯에서 작동합니다. 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을 체크 아웃하지 않았어. 꽤 달콤한 작은 위젯.