PythonでPyQt5を使用し作成したQMessageBox(ダイアログ)の値を取得してみます。
QMessageBox(ダイアログ)では、デフォルトで「OK」ボタンを提供し、このボタン以外にもボタンを追加することができます。さらに、追加したボタンがクリックされた場合に値を取得することもできます。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■作成したQMessageBox(ダイアログ)の値を取得する
では、早速PyQt5を使用しQMessageBox(ダイアログ)を作成し、ボタンの追加を行い、ボタンがクリックされた場合に、値を取得し表示するスクリプトを書いていきます。
■コード
import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget def show_pop(): msg = QMessageBox() msg.setWindowTitle("メッセージボックス") msg.setText("ユーザーに伝えたいテキストが表示されます。") msg.setStandardButtons(QMessageBox.Cancel|QMessageBox.Ok|QMessageBox.Retry) msg.buttonClicked.connect(popup) x = msg.exec_() def popup(i): print(i.text()) if __name__ == "__main__": app = QApplication(sys.argv) root = QWidget() root.resize(300,300) root.setWindowTitle('こんにちは、世界') button = QtWidgets.QPushButton(root) button.setText("送信ボタン") button.clicked.connect(show_pop) button.move(100,100) root.show() sys.exit(app.exec_())
今回はsysモジュールと、importでPyQt5でQtWidgets、「from import」でPyQt5.QtWidgetsのQApplication,QWidgetを呼び出します。
呼び出した後に、QMessageBox(ダイアログ)を表示させるために、def文を用いて、show_pop()という関数を定義します。今回の関数を呼び出した時の処理は、QMessageBox()を用いて、QMessageBox(ダイアログ)を作成し、setWindowTitle()やsetText()を用いQMessageBox(ダイアログ)内の文字列(テキスト)を設定し、さらにsetStandardButtons()でボタンを設定し、表示させるようにします。この時に、buttonClicked.connect()を用いてpopup()という関数を呼び出し、処理が実行されるようにします。
QMessageBox(ダイアログ)を表示させる関数を定義後は、先程のpopup()という関数を定義し、QMessageBox(ダイアログ)内のボタンをクリックした際に、text()を用いてボタンの情報をprint()関数で出力させるようにします。
その後に「if __name__ == ‘__main__’」で関数などをまとめたモジュールを作成します。
作成する内容は、app変数を定義し、QApplication()を用いて、QApplicationクラスのオブジェクトを作成し格納。格納後、root変数を定義し、QWidget()を用いてQWidgetクラスのオブジェクトを作成し格納。これはQtのすべてのUIオブジェクトの基本クラス。
格納後、resize()を用いて括弧内に任意のウィジェット(ウインドウ)のサイズを渡します。今回は300px×300pxを引数,パラメータとして渡します。
さらにsetWindowTitle()を用いて括弧内に表示させるウィンドウのタイトル(文字列)を渡します。今回は「こんにちは、世界」という日本語の文字列を引数,パラメータとして渡します。
ウィンドウのタイトルの設定を行った後に、今度はbutton変数を定義します。QPushButtonウィジェットを作成し、setText()で表示させるテキスト(文字列)を指定し、clicked.connect()を用いてウィジェットをクリックした後に、今回定義したshow_pop()関数を呼び出し処理を実行するようにします。ウィジェットの表示位置は、move()を用いて指定します。
その後、show()を用いてウィジェット(ウインドウ)をモニター画面に表示させます。
最後にsys.exit(app.exec_())を用います。app.exec_()は、イベントのループを開始させることができます。さらにQtに制御を渡し、ユーザーがGUIからアプリケーションを閉じた時のみ、アプリケーションを終了となりますので、途中でイベントが終了することはありません。このsys.exit(app.exec_())を用いずに、実行すると、ウインドウがすぐに閉じてしまいます。
■実行・検証
このスクリプトを「qt_messagebox_b_value.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、ウインドウ内に作成したQPushButtonウィジェット(ボタン)が表示されました。このボタンをクリックします。
クリックすると、QMessageBox(ダイアログ)が表示されました。さらにQMessageBox(ダイアログ)内に、指定したボタンを表示させることができました。このボタンをそれぞれクリックしてみます。
クリックしてみると、コマンドプロンプト上で、buttonClicked.connect()等を用いたことで、クリックしたボタンの情報(値)が取得され、値を出力させることができました。
コメント