【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 按鈕后出現主窗口:

點擊關閉按鈕時會出現確認對話框:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM