2016-09-28 33 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)