PythonでPyQt5を使用し作成したQProgressBar(プログレスバー)値の更新

PythonでPyQt5を使用し作成したQProgressBar(プログレスバー)値の更新を行ってみます。

QProgressBarウィジェットは、ファイル転送、ダウンロード、アップロードなどのコンピューターでの操作の進行を状況を視覚化することができますが、値を変更し、進行の状況変化を確認できるようにすることができます。

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

■Python

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

■作成したQProgressBar(プログレスバー)値を更新する

では、早速PyQt5を使用し作成したQProgressBar(プログレスバー)値を更新するスクリプトを書いていきます。

■コード

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

def update():
    value = pro_g_bar.value()
    pro_g_bar.setValue(value + 1)

def reset():
    value = 0
    pro_g_bar.setValue(value)

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

    pro_g_bar = QtWidgets.QProgressBar(root)
    pro_g_bar.setGeometry(50,50,250,30)
    pro_g_bar.setValue(0)

    update_button = QtWidgets.QPushButton(root)
    update_button.setText("更新ボタン")
    update_button.clicked.connect(update)
    update_button.move(50,100)

    reset_button = QtWidgets.QPushButton(root)
    reset_button.setText("リセットボタン")
    reset_button.clicked.connect(reset)
    reset_button.move(50,150)

    root.show()
    sys.exit(app.exec_())

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

呼び出した後に、QProgressBar(プログレスバー)値を更新させるために、def文を用いて、update()という関数を定義します。今回の関数を呼び出した時の処理は、value()を用いて、QProgressBar(プログレスバー)値を取得し、さらにsetValue()を用いて取得した値に算術演算子”+(プラス,加算)”で数値の「1」を追加していくものです。これで値が更新されます。

次に今回は更新したQProgressBar(プログレスバー)の値をリセットも行ってみますので、def文を用いて、reset()という関数を定義します。関数を呼び出した時の処理は、value変数を定義し、数値の「0」を格納します。格納後、setValue()を用いてQProgressBar(プログレスバー)値を数値の「0」にセットするものです。

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

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

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

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

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

作成後、QProgressBar(プログレスバー)ウィジェットの位置とサイズを設定するために、setGeometry()を用います。括弧内に第1と第2の引数,パラメータとしてスライダーのX位置とY位置を渡します。第3と第4の引数,パラメータには、スライダーの幅と高さを渡します。

位置とサイズを設定後、setValue()を用いて、括弧内に引数,パラメータとして作成したQProgressBar(プログレスバー)の値(Value)を渡します。今回は「0」とします。

QProgressBar(プログレスバー)の設定後、update_button変数を定義し、QPushButtonウィジェットを作成し、setText()で表示させるテキスト(文字列)を指定し、clicked.connect()を用いてウィジェットをクリックした後に、update()関数を呼び出し処理を実行するようにします。ウィジェットの表示位置は、move()を用いて指定します。

さらに、reset_button変数を定義し、QPushButtonウィジェットを作成し、update_button変数を定義した時と同じようにします。ですが、この時、setText()で表示させるテキスト(文字列)と、clicked.connect()を用いて呼び出す関数を変更し、作成したウィジェットの設定を行います。

その後、show()を用いてウィジェット(ウインドウ)をモニター画面に表示させます。

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

■実行・検証

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

実行してみると、ウインドウ内にQProgressBar(プログレスバー)が表示され、値を更新するために「更新ボタン」をクリックすると、QProgressBar(プログレスバー)の値を更新させ、QProgressBar(プログレスバー)を進行させることができました。

確認後、今度は「リセットボタン」をクリックすると、先程値が更新されて進行中のQProgressBar(プログレスバー)をリセット(値を「0」にセット)させ、プログレスバーを「0%」の表記にさせることができました。

コメント

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