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 按钮后出现主窗口:
点击关闭按钮时会出现确认对话框: