2016-09-28 8 views
0

私はQDateEditウィジェットをQDateEdit.setCalendarPopup(True)で使用しています。カレンダーのポップアップが閉じたときにイベントにスロットを接続しようとしています。これまでの私の試みは、MyCalendarWidgetにある私の例を見てください。これまでのところ、私の試みは一切働いていません。カレンダーウィジェットのポップアップが閉じられるたびにアクションを実行するにはどうすればいいですか?ではなく、の日付が変更されていますか?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) 
     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

はそれを考え出した - 私はQCalendarWidgetclicked信号を使用する必要が判明しました。これによりサブクラス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) 
関連する問題