У меня есть объект QDialog. Когда пользователь нажимает кнопку X
или нажимает Ctrl+Q
, я хочу, чтобы диалоговое окно переходило в свернутое представление или значок на панели задач, а не закрывалось. Как я могу это сделать?
Как поймать pyqt closeEvent и свернуть диалоговое окно вместо выхода?
Ответы (1)
Простой подкласс, который сворачивает, а не закрывает, выглядит следующим образом:
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)
Вы можете проверить это с помощью этого фрагмента в интерактивном интерпретаторе:
>>> 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
person
Bakuriu
schedule
11.09.2012
Спасибо, что помогли мне. Я нашел свой ответ. Я не знаю, почему
Qt.WindowMinimized
у меня не сработало. Я использовал self.setVisible(False)
вместо этого. Также, поскольку я использовал QDialog, в некоторых оконных менеджерах пользователь может закрыть диалог с помощью Esc key
. затем я повторно реализую функцию done
и делаю их одинаковыми.
- person Shahinism; 11.09.2012
В документации говорится, что способ обработки состояния окна в ОС отличается. В некоторых ОС изменение происходит не мгновенно и т. д. Я пробовал это решение и отлично работал в Linux.
- person Bakuriu; 11.09.2012
Это закрывает главное окно, как вы предотвращаете закрытие основного приложения?
- person jsibs; 23.07.2021
closeEvent(event)
в подклассе и свернуть диалоговое окно вместо того, чтобы принимать это событие. Или вы имеете в виду что-то другое? - person Bakuriu   schedule 11.09.2012