How do I catch a pyqt closeEvent and minimize the dialog instead of exiting?

后端 未结 1 731
庸人自扰
庸人自扰 2021-02-09 01:15

I have a QDialog object. When the user clicks on the X button or presses Ctrl+Q, I want the dialog to go to a minimized view or system tray icon, inst

1条回答
  •  失恋的感觉
    2021-02-09 01:20

    A simple subclass that minimizes instead of closing is the following:

    class MyDialog(QtGui.QDialog):
        # ...
        def __init__(self, parent=None):
            super(MyDialog, self).__init__(parent)
    
            # when you want to destroy the dialog set this to True
            self._want_to_close = False
    
        def closeEvent(self, evnt):
            if self._want_to_close:
                super(MyDialog, self).closeEvent(evnt)
            else:
                evnt.ignore()
                self.setWindowState(QtCore.Qt.WindowMinimized)
    

    You can test it with this snippet in the interactive interpreter:

    >>> from PyQt4 import QtCore, QtGui
    >>> app = QtGui.QApplication([])
    >>> win = MyDialog()
    >>> win.show()
    >>> app.exec_()   #after this try to close the dialog, it wont close bu minimize
    

    0 讨论(0)
提交回复
热议问题