Come faccio a catturare tutti gli eventi del mouse in un widget discende da un widget Qt in PyQt?

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

  •  19-09-2019
  •  | 
  •  

Domanda

In particolare, sto eredita da QCalendarWidget e voglio l'override del metodo mousePressEvent di filtrare ciò che le date possono essere selezionate (set disgiunti, non un semplice intervallo). Ma quando ho l'override del metodo, non cattura tutti gli eventi che stanno per widget figli all'interno del calendario. Come posso fare questo?

È stato utile?

Soluzione

Sono sorpreso che l'override mousePressEvent non funziona per un QCalendarWidget. Funziona per la maggior parte degli altri widget. Dopo aver esaminato la documentazione per QCalendarWidget, ho notato c'è un segnale cliccato. Se si collega che funziona.

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_()

Non avevo mai verificato QCalendarWidget prima. piccolo widget piuttosto dolce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top