2016-09-28 34 views
0

我正在使用QDateEdit小工具和QDateEdit.setCalendarPopup(True)。我试图在日历弹出窗口关闭时将插槽连接到事件。看到我的例子,下面是我迄今为止的尝试,发现在MyCalendarWidget。我迄今为止的尝试都没有奏效。每当日历小部件弹出窗口关闭时,我可以做些什么来执行操作,而不是仅当日期更改时才能执行操作?QCalendarWidget popup关闭时如何执行操作?

from PyQt4 import QtGui, QtCore 
import sys 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, *args): 
     super(MainWindow,self).__init__(*args) 
     self._date = QtGui.QDateEdit() 
     self._date.setCalendarPopup(True) 
     self._date.setCalendarWidget(MyCalendarWidget()) 
     self.setCentralWidget(self._date) 

class App(QtGui.QApplication): 
    def __init__(self, *args): 
     super(App,self).__init__(*args) 
     self.main = MainWindow() 
     self.connect(self, QtCore.SIGNAL("lastWindowClosed()"), self.byebye) 
     self.main.show() 

    def byebye(self): 
     self.exit(0) 

class MyCalendarWidget(QtGui.QCalendarWidget): 
    def __init__(self, parent=None): 
     print("mycal initialized") 
     super(MyCalendarWidget, self).__init__(parent) 

     self.installEventFilter(self) 
     self._many = 2 
     self._many2 = 2 

    def focusInEvent(self, event): 
     print('-'*self._many + 'focus in') 
     if self._many == 2: 
      self._many = 4 
     else: 
      self._many = 2 
     super(MyCalendarWidget, self).focusInEvent(event) 

    def focusOutEvent(self, event): 
     print('-'*self._many2+'focus out') 
     if self._many2 == 2: 
      self._many2 = 4 
     else: 
      self._many2 = 2 
     super(MyCalendarWidget, self).focusOutEvent(event) 

    def closeEvent(self, event): 
     print('close') 
     super(MyCalendarWidget, self).closeEvent(event) 

    def mouseReleaseEvent(self, event): 
     print('mouse') 
     super(MyCalendarWidget, self).mouseReleaseEvent(event) 

def main(args): 
    global app 
    app = App(args) 
    app.exec_() 

if __name__ == "__main__": 
    main(sys.argv) 

回答

0

想通了 - 原来我需要QCalendarWidget使用clicked信号。这也消除了对子类QCalendarWidget的需要。

from PyQt4 import QtGui, QtCore 
import sys 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, *args): 
     super(MainWindow,self).__init__(*args) 
     self._date = QtGui.QDateEdit() 
     self._date.setCalendarPopup(True) 
     calendar = self._date.calendarWidget() 
     calendar.clicked.connect(self._clicked) 
     self.setCentralWidget(self._date) 

    def _clicked(self, date): 
     print('clicked') 

class App(QtGui.QApplication): 
    def __init__(self, *args): 
     super(App,self).__init__(*args) 
     self.main = MainWindow() 
     self.connect(self, QtCore.SIGNAL("lastWindowClosed()"), self.byebye) 
     self.main.show() 

    def byebye(self): 
     self.exit(0) 

def main(args): 
    global app 
    app = App(args) 
    app.exec_() 

if __name__ == "__main__": 
    main(sys.argv)