在 PyQt5 应用程序中,当用户尝试关闭主窗口时,你可以显示一个确认对话框来询问用户是否真的要退出。这可以通过重新实现 closeEvent
方法来实现。以下是一个简单的示例,展示了如何实现这一功能:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt5 Exit Confirmation')
self.setGeometry(100, 100, 600, 400)
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure you want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
解释
-
导入必要的模块:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
-
创建主窗口类:
class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('PyQt5 Exit Confirmation') self.setGeometry(100, 100, 600, 400)
-
重新实现
closeEvent
方法:def closeEvent(self, event): reply = QMessageBox.question(self, 'Message', "Are you sure you want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore()
QMessageBox.question
方法用于显示一个带有“是”和“否”按钮的确认对话框。event.accept()
表示接受关闭事件,允许窗口关闭。event.ignore()
表示忽略关闭事件,保持窗口打开。
-
主程序入口:
if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_())
- 创建一个
QApplication
实例。 - 创建并显示主窗口。
- 进入应用程序的主事件循环,直到应用程序退出。
- 创建一个
这样,当用户尝试关闭主窗口时,会弹出一个确认对话框,询问用户是否真的要退出。如果用户选择“是”,应用程序将关闭;如果用户选择“否”,应用程序将继续运行。