我有一个QDialog对象。当用户点击“X”按钮或按下“Ctrl+Q”时,我想将对话框放到最小化视图或系统托盘图标中,而不是关闭。我该怎么做?
以下是一个简单的子类,它最小化而不是关闭:
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
Qt.WindowMinimized
对我无效。我使用了 self.setVisible(False)
代替它。另外,因为我使用了 QDialog,在某些窗口管理器中,用户可以使用 Esc
键关闭对话框。因此,我重新实现了 done
函数并使它们相同。 - Shahin
closeEvent(event)
方法,将对话框最小化而不是接受该事件。 或者你的意思是其他的? - Bakuriu