Python PyQt5 QMessageBox 用法與範例

本篇 ShengYu 介紹 Python PyQt5 QMessageBox 用法與範例,在 Python GUI 程式設計中常常需要提出一個提示對話框告訴使用者一些訊息,例如:有錯誤發生或者離開程式前的確認對話框,所以這篇會大概地介紹常用的 QMessageBox 用法與範例。

以下的 Python PyQt5 QMessageBox 用法與範例將分為這幾部分,

  • PyQt5 QMessageBox 提示訊息對話框
  • PyQt5 QMessageBox 警告訊息對話框
  • PyQt5 QMessageBox 錯誤訊息對話框
  • PyQt5 QMessageBox 確定取消對話框

那就開始吧!

PyQt5 QMessageBox 提示訊息對話框

Python PyQt5 QMessageBox 提示訊息對話框基本用法如下,QMessageBox.information() 用來顯示一般資訊,如果第一個引數沒有父類別的 Widget 帶入可以使用 None,

python-pyqt-qmessagebox.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.information(None, 'my messagebox', 'hello world')

結果圖如下,

接下來示範有父類別的 Widget 的寫法,

python-pyqt-qmessagebox2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('Button example')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('Button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
reply = QMessageBox.information(self, 'my messagebox', 'hello world',
QMessageBox.Ok | QMessageBox.Close, QMessageBox.Close)
if reply == QMessageBox.Ok:
print('Ok clicked.')
self.mybutton.setText("Ok clicked.")
else:
print('Close clicked.')
self.mybutton.setText("Close clicked.")

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

除了直接使用 QMessageBox.information() 將所有引數都帶入以外還有另一種寫法,就是先宣告一個 QMessageBox 變數,在一個一個地去使用對應的函式,最後再使用 exec(),如下所示,

1
2
3
4
5
6
7
8
msgbox = QMessageBox()
msgbox.setWindowTitle('my messagebox')
msgbox.setIcon(QMessageBox.Information)
msgbox.setText('hello world')
msgbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Close)
msgbox.setDefaultButton(QMessageBox.Ok)
#msgbox.setDetailedText('detail ...')
reply = msgbox.exec()

PyQt5 QMessageBox 警告訊息對話框

PyQt5 要顯示警告訊息對話框的話用 QMessageBox.warning(),如果第一個引數沒有父類別的 Widget 帶入可以使用 None,用法如下,

python-pyqt-qmessagebox3.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.warning(None, 'my messagebox', 'hello world')

結果圖如下,

接下來示範有父類別的 Widget 的寫法,

python-pyqt-qmessagebox4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('Button example')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('Button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
reply = QMessageBox.warning(self, 'my messagebox', 'hello world',
QMessageBox.Ok | QMessageBox.Close, QMessageBox.Close)
if reply == QMessageBox.Ok:
print('Ok clicked.')
self.mybutton.setText("Ok clicked.")
else:
print('Close clicked.')
self.mybutton.setText("Close clicked.")

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

除了直接使用 QMessageBox.warning() 將所有引數都帶入以外還有另一種寫法,就是先宣告一個 QMessageBox 變數,在一個一個地去使用對應的函式,最後再使用 exec(),如下所示,

1
2
3
4
5
6
7
8
msgbox = QMessageBox(self)
msgbox.setWindowTitle('my messagebox')
msgbox.setIcon(QMessageBox.Warning)
msgbox.setText('hello world')
msgbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Close)
msgbox.setDefaultButton(QMessageBox.Ok)
# msgbox.setDetailedText('detail ...')
reply = msgbox.exec()

PyQt5 QMessageBox 錯誤訊息對話框

PyQt5 要顯示錯誤訊息對話框的話用 messagebox.showerror(),如果第一個引數沒有父類別的 Widget 帶入可以使用 None,用法如下,

python-pyqt-qmessagebox5.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.critical(None, 'my messagebox', 'hello world')

結果圖如下,

接下來示範有父類別的 Widget 的寫法,

python-pyqt-qmessagebox6.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('Button example')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('Button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
reply = QMessageBox.critical(self, 'my messagebox', 'hello world',
QMessageBox.Retry | QMessageBox.Abort | QMessageBox.Ignore, QMessageBox.Retry)
if reply == QMessageBox.Retry:
print('Retry clicked.')
self.mybutton.setText("Retry clicked.")
elif reply == QMessageBox.Abort:
print('Abort clicked.')
self.mybutton.setText("Abort clicked.")
else:
print('Ignore clicked.')
self.mybutton.setText("Ignore clicked.")

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

除了直接使用 QMessageBox.critical() 將所有引數都帶入以外還有另一種寫法,就是先宣告一個 QMessageBox 變數,在一個一個地去使用對應的函式,最後再使用 exec(),如下所示,

1
2
3
4
5
6
7
8
msgbox = QMessageBox(self)
msgbox.setWindowTitle('my messagebox')
msgbox.setIcon(QMessageBox.Critical)
msgbox.setText('hello world')
msgbox.setStandardButtons(QMessageBox.Retry | QMessageBox.Abort | QMessageBox.Ignore)
msgbox.setDefaultButton(QMessageBox.Retry)
#msgbox.setDetailedText('detail ...')
reply = msgbox.exec()

PyQt5 QMessageBox 確定取消對話框

PyQt5 要顯示確定取消訊息對話框的話用 messagebox.askokcancel(),如果第一個引數沒有父類別的 Widget 帶入可以使用 None,用法如下,

python-pyqt-qmessagebox7.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.question(None, 'my messagebox', 'hello world')

結果圖如下,

接下來示範有父類別的 Widget 的寫法,

python-pyqt-qmessagebox8.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('Button example')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('Button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
reply = QMessageBox.question(self, 'my messagebox', 'hello world',
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
print('Yes clicked.')
self.mybutton.setText("Yes clicked.")
else:
print('No clicked.')
self.mybutton.setText("No clicked.")

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

除了直接使用 QMessageBox.question() 將所有引數都帶入以外還有另一種寫法,就是先宣告一個 QMessageBox 變數,在一個一個地去使用對應的函式,最後再使用 exec(),如下所示,

1
2
3
4
5
6
7
8
msgbox = QMessageBox(self)
msgbox.setWindowTitle('my messagebox')
msgbox.setIcon(QMessageBox.Question)
msgbox.setText('hello world')
msgbox.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
msgbox.setDefaultButton(QMessageBox.No)
# msgbox.setDetailedText('detail ...')
reply = msgbox.exec()

以上就是 Python PyQt5 QMessageBox 的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦

Python 新手入門教學懶人包
Python PyQt5 新手入門教學