Como posso capturar todos os eventos do mouse em um widget descendem de um Qt Widget em PyQt?

StackOverflow https://stackoverflow.com/questions/1716916

  •  19-09-2019
  •  | 
  •  

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?

Foi útil?

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
scroll top