PythonでPyQt5を使用し作成したQSlider(スライダー)の値を取得してみます。
QSliderウィジェットは、さまざまな値の範囲からユーザーがスライダーを動かすことで、それに応じた値に変更でき、その値を選択することができます。さらに選択した値を取得することができます。
今回はPyQt5を使用します。PyQt5はPythonの標準ライブラリではないので、事前にインストールする必要があります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■作成したQSlider(スライダー)の値を取得する
では、早速PyQt5を使用しQSlider(スライダー)を作成し値を取得するスクリプトを書いていきます。
■コード
import sys import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QWidget def value_s(): label_test.setText(str(slider.value())) if __name__ == "__main__": app = QApplication(sys.argv) root = QWidget() root.resize(300,300) root.setWindowTitle('こんにちは、世界') slider = QtWidgets.QSlider(root) slider.setGeometry(50,50,200,50) slider.setMinimum(0) slider.setMaximum(20) slider.setTickPosition(QtWidgets.QSlider.TicksBelow) slider.setTickInterval(2) slider.valueChanged.connect(value_s) label_test = QtWidgets.QLabel(root) label_test.move(100,100) root.show() sys.exit(app.exec_())
今回はsysモジュールと、importでPyQt5でQtWidgets、「from import」でPyQt5.QtWidgetsのQApplication,QWidgetを呼び出します。
呼び出した後に、QSlider(スライダー)の値を表示させるために、def文を用いて、value_s()という関数を定義します。今回の関数を呼び出した時の処理は、slider.value()を用いて、QSlider(スライダー)の値を取得し、str()を用いて整数値を文字列に変換し、変換した値を、setText()で保持し、QLabel(テキスト)ウィジェットに表示させるようにします。
その後に「if __name__ == ‘__main__’」で関数などをまとめたモジュールを作成します。
作成する内容は、app変数を定義し、QApplication()を用いて、QApplicationクラスのオブジェクトを作成し格納。格納後、root変数を定義し、QWidget()を用いてQWidgetクラスのオブジェクトを作成し格納。これはQtのすべてのUIオブジェクトの基本クラス。
格納後、resize()を用いて括弧内に任意のウィジェット(ウインドウ)のサイズを渡します。今回は300px×300pxを引数,パラメータとして渡します。
さらにsetWindowTitle()を用いて括弧内に表示させるウィンドウのタイトル(文字列)を渡します。今回は「こんにちは、世界」という日本語の文字列を引数,パラメータとして渡します。
ウィンドウのタイトルの設定を行った後に、今度はQSlider(スライダー)ウィジェットを作成します。sliderという変数を定義し、QtWidgets.QSlider()を用います。括弧内には引数,パラメータとしてrootを渡します。これでQSlider(スライダー)ウィジェットが作成されます。
作成後、QSlider(スライダー)ウィジェットの位置とサイズを設定するために、setGeometry()を用います。括弧内に第1と第2の引数,パラメータとしてスライダーのX位置とY位置を渡します。第3と第4の引数,パラメータには、スライダーの幅と高さを渡します。
位置とサイズを設定後、setMinimum()とsetMaximum()を用いて、今度はスライダーの最小範囲(Minimum)と最大範囲(Maximum)を、括弧内に引数,パラメータとして渡します。これでQSlider(スライダー)ウィジェット内の最小と最大の範囲が設定されます。
最小と最大の範囲が設定後、setTickPosition()を用いて、スライダーの目盛りの位置を設定するために、括弧内に「QSlider.TicksBelow」を引数,パラメータとして渡します。今回は「QSlider.TicksBelow」という目盛りを描画します。
目盛りの位置の設定後、setTickInterval()を用いて、今度は、スライダーの目盛り間の間隔を設定します。括弧内に間隔を引数,パラメータとして渡します。今回は「2」とします。
目盛り間の間隔の設定後、valueChanged.connect()を用いて、括弧内に引数,パラメータとして、value_s()関数を渡し、変更したスライダーの値(整数値)を、value_s()関数とつなぎます。
つないだ後に、label_testという変数を定義し、QtWidgets.QLabel()を用いて、QLabel(テキスト)ウィジェットを作成。作成後、move()を用いて括弧内に引数,パラメータとして、ウィジェットの表示位置を渡します。
その後、show()を用いてウィジェット(ウインドウ)をモニター画面に表示させます。
最後にsys.exit(app.exec_())を用います。app.exec_()は、イベントのループを開始させることができます。さらにQtに制御を渡し、ユーザーがGUIからアプリケーションを閉じた時のみ、アプリケーションを終了となりますので、途中でイベントが終了することはありません。このsys.exit(app.exec_())を用いずに、実行すると、ウインドウがすぐに閉じてしまいます。
■実行・検証
このスクリプトを「qt_qslider_value.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、ウインドウ内にQSlider(スライダー)が表示され、このスライダーを、マウスで変更すると、変更した値が、ウインドウ内で指定した位置に表示されているQLabel(テキスト)ウィジェットに表示されることを確認できました。
コメント