我正在尝试创建自定义退出提示对话框,该对话框应执行以下操作:
所以,没什么特别的,但当我点击否时,它会关闭主程序 我试过用
app.setQuitOnLastWindowClosed(False)
但在这种情况下,主窗口被隐藏,程序被“卡住” 这是代码。
class AreYouSure(QtGui.QDialog):
saved = QtCore.pyqtSignal()
def __init__(self):
super(AreYouSure, self).__init__()
self.initUI()
self.retranslateUI()
self.initActions()
def initUI(self):
layout = QtGui.QVBoxLayout()
hor_lay = QtGui.QHBoxLayout()
self.label = QtGui.QLabel()
self.check_item = QtGui.QCheckBox()
self.yes = QtGui.QPushButton()
self.no = QtGui.QPushButton()
hor_lay.addWidget(self.yes)
hor_lay.addWidget(self.no)
layout.addWidget(self.check_item)
layout.addWidget(self.label)
layout.addLayout(hor_lay)
self.setLayout(layout)
def retranslateUI(self):
self.setWindowTitle("Exit")
self.label.setText("Are you sure to quit?")
self.yes.setText("Yes")
self.no.setText("No")
self.check_item.setText("Save e-mail/password")
def exit(self):
if self.check_item.isChecked():
self.saved.emit()
QtGui.QApplication.quit()
def initActions(self):
self.yes.clicked.connect(self.exit)
self.no.clicked.connect(self.close)
并在MainWindow中
def closeEvent(self, event):
a = AreYouSure()
a.saved.connect(self.saveDefaults)
a.exec_()
def saveDefaults(self):
'''save default email and password'''
self.settings = QtCore.QSettings(DEFAULT_NAME, QtCore.QSettings.IniFormat)
self.settings.setValue("email", self.email_edit.text())
self.settings.setValue("password", self.pass_edit.text())
我做错了什么?
答案 0 :(得分:1)
def closeEvent(self, event):
a = AreYouSure()
a.saved.connect(self.saveDefaults)
a.exec_()
event.ignore()
添加 event.ignore()解决了这个问题。任何人都可以解释,为什么? CloseEvent被覆盖,不应该接受事件,是吗?
答案 1 :(得分:1)
您应添加event.ignore()
的原因是默认情况下接受所有QEvent(也意味着您不需要致电event.accept()
):doc