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 按鈕后出現主窗口:
點擊關閉按鈕時會出現確認對話框: