↑ページトップへ

Qt for Python メッセージボックス

PySide2 5.12.1Python 3.7.2

スタティックな呼び出し

メッセージボックスを表示するには以下のように「QMessageBox.information()」を使用します。

MessageBox-Static.py
# -*- 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')
information実行結果

パラメーターの意味は以下のとおりです。

押されたボタンの種類 = QMessageBox.information(親ウィンドウ、タイトル文字列、メッセージ文字列[、ボタンの種類=QMessageBox.Ok[、デフォルトボタンの種類=NoButton]])

使用できるボタンの種類は以下のとおりです。

ボタンの種類
QMessageBox.OkAcceptRoleが定義された「OK」ボタン
QMessageBox.OpenAcceptRoleが定義された「Open」ボタン
QMessageBox.SaveAcceptRoleが定義された「Save」ボタン
QMessageBox.CancelRejectRoleが定義された「Cancel」ボタン
QMessageBox.CloseRejectRoleが定義された「Close」ボタン
QMessageBox.DiscardDestructiveRoleが定義された「Discard」ボタンまたは「Don’t Save」ボタン(プラットフォーム依存)
QMessageBox.ApplyApplyRoleが定義された「Apply」ボタン
QMessageBox.ResetResetRoleが定義された「Reset」ボタン
QMessageBox.RestoreDefaultsResetRoleが定義された「Restore Defaults」ボタン
QMessageBox.HelpHelpRoleが定義された「Help」ボタン
QMessageBox.SaveAllAcceptRoleが定義された「Save All」ボタン
QMessageBox.YesYesRoleが定義された「Yes」ボタン
QMessageBox.YesToAllYesRoleが定義された「Yes to All」ボタン
QMessageBox.NoNoRoleが定義された「No」ボタン
QMessageBox.NoToAllNoRoleが定義された「No to All」ボタン
QMessageBox.AbortRejectRoleが定義された「Abort」ボタン
QMessageBox.RetryAcceptRoleが定義された「Retry」ボタン
QMessageBox.IgnoreAcceptRoleが定義された「Ignore」ボタン
QMessageBox.NoButton無効を表す値

information()以外にもquestion()、warning()、critical()が用意され、それぞれ表示されるアイコンが異なります。

information question warning critical
左から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")
Custom実行結果

メッセージボックスをインスタンス化して使用する場合には独自のボタンを追加することもできます。以下の例では「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")		

上記のスクリプトを実行すると次のようなメッセージボックスが表示されます。

CustomAdvance実行結果

参照

QMessageBox — Qt for Python