PythonでPyQt5を使用し作成したQTimer(タイマー)ウィジェットにエンドポイントを作成する

スポンサーリンク

PythonでPyQt5を使用し作成したQTimer(タイマー)ウィジェットにエンドポイントを作成してみます。

QTimer(タイマー)ウィジェットは、特定の期間待機し、信号を送信し関数などを呼び出し実行させることができますが、場合によっては、作成したタイマーは、関数などを永久的に呼び出し続けてしまうことがあります。そこで、エンドポイントを作成しタイマーが停止するようにしてみます。

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

■Python

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

■作成したQTimer(タイマー)ウィジェットにエンドポイントを作成する

では、早速PyQt5を使用しQTimer(タイマー)ウィジェットを作成し、さらにエンドポイントを作ってみます。

■コード

import sys
from typing import Counter
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget

def hello():
    global count 
    count += 1
    if count > 10:
        print("終了しました")
        timer.stop()
        return
    print("こんにちは、世界")

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

    timer = QtCore.QTimer(root)
    timer.timeout.connect(hello)
    timer.start(1000)

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

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

呼び出した後に、特定の期間待機した後に関数を呼び出してみますので、def文を用いて、hello()という関数を定義します。今回の関数を呼び出した時の処理は、countというglobal(グローバル変数)を定義します。なお、countはエンドポイント作成のために数値の「0」を格納しておきます。次に、countに代入演算子”+=”を用い、数値の「1」を代入します。代入し、if文でもしも、count内の数値が、比較演算子”>”を用い、countが10よりも大きい場合に、stop()を用いて、タイマーを終了,停止させ、print()を出力させるという処理を書いています。

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

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

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

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

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

作成後、timer.timeout.connect()を用いて、タイムアウト後、呼び出す関数を括弧内に引数,パラメータとして渡します。

呼び出す関数の設定後、start()を用いて特定の期間の待機を開始する指定を行います。括弧内に引数,パラメータとして、タイマーの間隔を渡します。

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

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

■実行・検証

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

実行させてみると、ウインドウが表示され、今回定義した関数が呼び出し、処理を実行させることができました。実行された処理を確認すると、エンドポイントの作成により、指定した回数でタイマーが終了,停止となっていることを確認できました。

コメント

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