【PyQt5 学习记录】006:重写窗口事件及QMessageBox

 1 #!/usr/bin/env python
 2 
 3 import sys
 4 from PyQt5.QtWidgets import (QApplication,
 5                              QMainWindow,
 6                              QMessageBox)
 7 from PyQt5.QtCore import Qt
 8 
 9 
10 class Window(QMainWindow):
11     def __init__(self, parent=None):
12         super(Window, self).__init__(parent, Qt.Window)
13 
14         self.status = self.statusBar()
15         self.init_ui()
16 
17     def init_ui(self):
18         # 在程序窗口显示之前弹出对话框:
19         message = QMessageBox()
20         # 对话框图标设置:
21         message.setIcon(QMessageBox.Information)
22         # 设置对话框标题:
23         message.setWindowTitle("开始")
24         # 设置对话框文本:
25         message.setText("软件运行。")
26         # 设置对话框信息文本:
27         message.setInformativeText("这是一个重写窗口事件的记录。")
28         # 显示对话框:
29         message.exec_()
30 
31         self.resize(500, 450)
32         # 窗口置顶:
33         self.setWindowFlag(Qt.WindowStaysOnTopHint)
34         self.show()
35 
36     def moveEvent(self, *args, **kwargs):
37         # 重写移动事件:
38         # 在状态栏显示窗口坐标
39         self.status.showMessage("窗口坐标: X = {0} | y = {1}".format(self.x(), self.y()))
40 
41     def resizeEvent(self, event):
42         # 重写改变窗口尺寸事件:
43         # 在状态栏显示窗口尺寸
44         self.status.showMessage("窗口尺寸:{0} × {1}".format(self.width(), self.height()))
45 
46     def closeEvent(self, event):
47         # 重写关闭事件,确认是否真的要关闭:
48         self.status.showMessage("关闭提醒")
49         message = QMessageBox()
50         # 置顶显示对话框:
51         message.setWindowFlag(Qt.WindowStaysOnTopHint)
52         message.setIcon(QMessageBox.Warning)
53         message.setText("真的要退出吗?")
54         # 自定义对话框按钮:
55         # 必须要指定按钮的 Role 属性,不能忘
56         message.addButton("是的,我要退出!", QMessageBox.AcceptRole)
57         msg_no = message.addButton("等等,我再想想!", QMessageBox.NoRole)
58         # 设置默认按钮:
59         message.setDefaultButton(msg_no)
60         # 接收按下对话框按钮的信息:
61         reply = message.exec_()
62         # 第一个按钮返回 0 ,第二个返回 1 ,以此类推:
63         if reply == 0:
64             # 确认,退出程序:
65             event.accept()
66         # 也可以通过按钮的 Role 属性判断
67         if reply == QMessageBox.NoRole:
68             # 取消,不退出程序:
69             event.ignore()
70 
71 
72 if __name__ == "__main__":
73     app = QApplication(sys.argv)
74     win = Window()
75     sys.exit(app.exec_())

程序运行时先弹出对话框:

点击 OK 按钮后出现主窗口:

点击关闭按钮时会出现确认对话框:

原文地址:https://www.cnblogs.com/jmtm/p/9836369.html