メッセージボックスを表示するには以下のように「QMessageBox.information()」を使用します。
# -*- coding: utf-8 -*-
import sys
from PySide2.QtWidgets import *
if __name__ == '__main__':
app = QApplication(sys.argv)
ret = QMessageBox.information(None, "My message", "Press a button!", QMessageBox.Yes, QMessageBox.No)
if ret == QMessageBox.Yes:
print('Yes was clicked')
elif ret == QMessageBox.No:
print('No was clicked')
パラメーターの意味は以下のとおりです。
押されたボタンの種類 = QMessageBox.information(親ウィンドウ、タイトル文字列、メッセージ文字列[、ボタンの種類=QMessageBox.Ok[、デフォルトボタンの種類=NoButton]])
使用できるボタンの種類は以下のとおりです。
QMessageBox.Ok | AcceptRoleが定義された「OK」ボタン |
QMessageBox.Open | AcceptRoleが定義された「Open」ボタン |
QMessageBox.Save | AcceptRoleが定義された「Save」ボタン |
QMessageBox.Cancel | RejectRoleが定義された「Cancel」ボタン |
QMessageBox.Close | RejectRoleが定義された「Close」ボタン |
QMessageBox.Discard | DestructiveRoleが定義された「Discard」ボタンまたは「Don’t Save」ボタン(プラットフォーム依存) |
QMessageBox.Apply | ApplyRoleが定義された「Apply」ボタン |
QMessageBox.Reset | ResetRoleが定義された「Reset」ボタン |
QMessageBox.RestoreDefaults | ResetRoleが定義された「Restore Defaults」ボタン |
QMessageBox.Help | HelpRoleが定義された「Help」ボタン |
QMessageBox.SaveAll | AcceptRoleが定義された「Save All」ボタン |
QMessageBox.Yes | YesRoleが定義された「Yes」ボタン |
QMessageBox.YesToAll | YesRoleが定義された「Yes to All」ボタン |
QMessageBox.No | NoRoleが定義された「No」ボタン |
QMessageBox.NoToAll | NoRoleが定義された「No to All」ボタン |
QMessageBox.Abort | RejectRoleが定義された「Abort」ボタン |
QMessageBox.Retry | AcceptRoleが定義された「Retry」ボタン |
QMessageBox.Ignore | AcceptRoleが定義された「Ignore」ボタン |
QMessageBox.NoButton | 無効を表す値 |
information()以外にもquestion()、warning()、critical()が用意され、それぞれ表示されるアイコンが異なります。
メッセージボックスをインスタンス化して使用することも可能です。その場合は3つ以上のボタンを配置するなど、スタティックな方法よりも細かい設定ができます。
# -*- coding: utf-8 -*-
import sys
from PySide2.QtWidgets import *
if __name__ == '__main__':
app = QApplication(sys.argv)
msgBox = QMessageBox()
msgBox.setText(u"ドキュメントが変更されました。")
msgBox.setInformativeText(u"変更を保存しますか?")
msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
msgBox.setDefaultButton(QMessageBox.Save)
ret = msgBox.exec_()
if ret == QMessageBox.Save:
print("Save")
elif ret == QMessageBox.Discard:
print("Discard")
elif ret == QMessageBox.Cancel:
print(u"Cancel")
メッセージボックスをインスタンス化して使用する場合には独自のボタンを追加することもできます。以下の例では「Connect」ボタンを作成して追加しています。
# -*- coding: utf-8 -*-
import sys
from PySide2.QtWidgets import *
if __name__ == '__main__':
app = QApplication(sys.argv)
msgBox = QMessageBox()
msgBox.setText("Connect or abort?")
connectButton = msgBox.addButton("Connect", QMessageBox.ActionRole)
abortButton = msgBox.addButton(QMessageBox.Abort)
msgBox.exec_()
if msgBox.clickedButton() == connectButton:
print("Connect")
elif msgBox.clickedButton() == abortButton:
print("Abort")
上記のスクリプトを実行すると次のようなメッセージボックスが表示されます。