PythonでPyQt5を使用し作成したQMessageBox(ダイアログ)のボタン追加と変更

PythonでPyQt5を使用し作成したQMessageBox(ダイアログ)のボタン追加と変更を行ってみます。

QMessageBox(ダイアログ)では、デフォルトで「OK」ボタンを提供していますが、これ以外にもボタンを追加することができます。

QMessageBox.Ok
QMessageBox.No
QMessageBox.Yes
QMessageBox.Cancel
QMessageBox.Close
QMessageBox.Abort
QMessageBox.open
QMessageBox.Retry
QMessageBox.Ignore
QMessageBox.Save
QMessageBox.Retry
QMessageBox.Apply
QMessageBox.Help
QMessageBox.Reset
QMessageBox.SaveAll
QMessageBox.YesToAll
QMessageBox.NoToAll

なお、使用できるボタンは上記になります。

今回はPyQt5を使用します。PyQt5はPythonの標準ライブラリではないので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■QMessageBox(ダイアログ)を作成しボタンを追加する

では、早速PyQt5を使用しQMessageBox(ダイアログ)を作成し、ボタンの追加を行い表示するスクリプトを書いていきます。

■コード

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget

if __name__ == "__main__":
    app = QApplication(sys.argv)
    root = QWidget()
    root.resize(300,300)
    root.setWindowTitle('こんにちは、世界')

    msg = QMessageBox(root)
    msg.setWindowTitle("メッセージボックス")
    msg.setText("ユーザーに伝えたいテキストが表示されます。")
    msg.setStandardButtons(QMessageBox.Cancel|QMessageBox.Ok|QMessageBox.Retry)
    x = msg.exec_()

    root.show()

    sys.exit(app.exec_())

今回はsysモジュールと、importでPyQt5でQtWidgets、「from import」でPyQt5.QtWidgetsのQApplication,QWidgetを呼び出します。

その後に「if __name__ == ‘__main__’」で関数などをまとめたモジュールを作成します。

作成する内容は、app変数を定義し、QApplication()を用いて、QApplicationクラスのオブジェクトを作成し格納。格納後、root変数を定義し、QWidget()を用いてQWidgetクラスのオブジェクトを作成し格納。これはQtのすべてのUIオブジェクトの基本クラス。

格納後、resize()を用いて括弧内に任意のウィジェット(ウインドウ)のサイズを渡します。今回は300px×300pxを引数,パラメータとして渡します。

さらにsetWindowTitle()を用いて括弧内に表示させるウィンドウのタイトル(文字列)を渡します。今回は「こんにちは、世界」という日本語の文字列を引数,パラメータとして渡します。

ウィンドウのタイトルの設定を行った後に、今度はQMessageBox(ダイアログ)ウィジェットを作成します。msgという変数を定義し、QMessageBox()を用います。括弧内には引数,パラメータとしてrootを渡します。これでQMessageBox(ダイアログ)ウィジェットが作成されます。

作成後、QMessageBox(ダイアログ)ウィジェットのタイトルを設定するために、setWindowTitle()を用います。括弧内に引数,パラメータとしてタイトルを渡します。これでタイトルが表示されるようになります。

タイトルの設定後、setText()を用いて、今度はウィジェット内に表示させるテキスト(文字列)を括弧内に引数,パラメータとして渡します。これでウィジェット内にテキスト(文字列)が表示されるようになります。

表示させるテキスト(文字列)を設定後、setStandardButtons()を用います。括弧内には、追加するボタンを引数,パラメータとして渡します。今回は”|”を用いてボタン同士を区切り「Ok」,「Cancel」,「Retry」の英語表記のボタンを追加しています。なお、ボタンの順序は、スクリプトを実行時に表示されるQMessageBox(ダイアログ)ウィジェット内のボタンの順序には影響を及ぼしません。

その後、xという変数を定義し、作成したQMessageBox(ダイアログ)ウィジェットに対して、exec_()を用いて、QMessageBox(ダイアログ)ウィジェットが実行されるようにします。

最後にsys.exit(app.exec_())を用います。app.exec_()は、イベントのループを開始させることができます。さらにQtに制御を渡し、ユーザーがGUIからアプリケーションを閉じた時のみ、アプリケーションを終了となりますので、途中でイベントが終了することはありません。このsys.exit(app.exec_())を用いずに、実行すると、ウインドウがすぐに閉じてしまいます。

■実行・検証

このスクリプトを「qt_messagebox_button.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、setStandardButtons()を用いたことで、QMessageBox(ダイアログ)ウィジェット内のボタンを変更し、今回指定したボタンを追加し、表記させることができました。

コメント

タイトルとURLをコピーしました