【问题标题】:How to perform action when QCalendarWidget popup closes?QCalendarWidget 弹出窗口关闭时如何执行操作?
【发布时间】:2023-03-20 02:00:01
【问题描述】:

我正在使用带有QDateEdit.setCalendarPopup(True)QDateEdit 小部件。当日历弹出窗口关闭时,我正在尝试将插槽连接到事件。到目前为止,请参阅下面的示例,了解我在MyCalendarWidget 中的尝试。到目前为止,我的任何尝试都没有奏效。每次日历小部件弹出窗口关闭时,我该怎么做才能执行操作,不是仅在日期更改时?

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)

【问题讨论】:

    标签: python qt qt4 pyqt4


    【解决方案1】:

    想通了——原来我需要在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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多