PythonでPyQt5を使用しQInputDialog(ダイアログ)を作成してみます。
QInputDialogウィジェットは、ユーザーからの入力を受け取ることができます。
今回はPyQt5を使用します。PyQt5はPythonの標準ライブラリではないので、事前にインストールする必要があります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■QInputDialog(ダイアログ)ウィジェットを作成する
では、早速PyQt5を使用しQInputDialog(ダイアログ)ウィジェットを作成し、受け取った値を出力させるスクリプトを書いていきます。
■コード
import builtins import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QInputDialog, QPushButton, QWidget def display(): text,pressed = QInputDialog.getText(root,"テキストを入力","テキスト:",QtWidgets.QLineEdit.Normal,"") if pressed: label.setText(text) label.adjustSize() if __name__ == "__main__": app = QApplication(sys.argv) root = QWidget() root.resize(300,300) root.setWindowTitle('こんにちは、世界') label = QtWidgets.QLabel(root) label.setText("空のテキスト") label.move(60,80) button = QPushButton(root) button.setText("送信ボタン") button.clicked.connect(display) button.move(60,120) 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()を用いて括弧内に表示させるウィンドウのタイトル(文字列)を渡します。今回は「こんにちは、世界」という日本語の文字列を引数,パラメータとして渡します。
ウィンドウのタイトルの設定を行った後に、今度はQLabelウィジェットを作成します。labelという変数を定義し、QtWidgets.QLabel()を用います。括弧内には引数,パラメータとしてrootを渡します。これでlabelウィジェットが作成されます。QInputDialog(ダイアログ)ウィジェットで受け取った値をここに表示させます。
作成後、setText()を用いてlabelウィジェットに表示させるテキスト(文字列)を引数,パラメータとして渡し、さらにmove()を用いてウィジェットの表示位置を指定します。
指定後、button変数を定義し、QPushButtonウィジェットを作成し、setText()で表示させるテキスト(文字列)を指定し、clicked.connect()を用いてウィジェットをクリックした後に、display()関数を呼び出し処理を実行するようにします。ウィジェットの表示位置は、move()を用いて指定します。
今回、呼び出す関数ですが、def文を用いて、display()という関数を定義します。今回の関数を呼び出した時の処理は、QInputDialog(ダイアログ)ウィジェットを作成し、getText()を用いて、ウィジェットにユーザーが入力してテキスト(文字列)を取得させるものです。さらにif文でもしユーザーが入力した場合に、作成したQLabelウィジェットにsetText()を用いて、入力したテキスト(文字列)を出力させるようにします。
その後、show()を用いてウィジェット(ウインドウ)をモニター画面に表示させます。
最後にsys.exit(app.exec_())を用います。app.exec_()は、イベントのループを開始させることができます。さらにQtに制御を渡し、ユーザーがGUIからアプリケーションを閉じた時のみ、アプリケーションを終了となりますので、途中でイベントが終了することはありません。このsys.exit(app.exec_())を用いずに、実行すると、ウインドウがすぐに閉じてしまいます。
■実行・検証
このスクリプトを「qInputdialog.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行させてみると、ウインドウが表示され、QLabelウィジェットとQPushButtonウィジェットが表示されていることが確認できました。確認後、QPushButtonウィジェット(ボタン)をクリックします。
クリックすると、QInputDialog(ダイアログ)ウィジェットが表示されることを確認しました。ウィジェット内の入力欄にテストで文字列を入力し、「OK」ボタンをクリックしてみます。
クリックすると、定義した関数が呼び出され、作成したQLabelウィジェットの内容を、ユーザーから受け取った値(テキスト)に変更させることができました。
コメント