Como posso capturar todos os eventos do mouse em um widget descendem de um Qt Widget em PyQt?
Pergunta
Em particular, estou herdando de QCalendarWidget e eu quero substituir o método mousePressEvent para filtrar o que datas estão autorizados a ser selecionado (conjunto de disjuntos, não uma gama simples). Mas quando eu substituir o método, ele não pegar todos os eventos que vão widgets filhos dentro do calendário. Como posso fazer isso?
Solução
Eu estou surpreso que substituir mousePressEvent não funciona para um QCalendarWidget. Ele funciona para a maioria dos outros widgets. Depois de olhar para a documentação para QCalendarWidget, noto que há um sinal clicado. Se você conectar que ele 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_()
Eu nunca tinha verificado QCalendarWidget antes. Muito doce pouco widget.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow