【Python】ルーレットアプリ開発 Part5

【Python】ルーレットアプリ開発 Part5

こんにちは、にわこまです。

今回は、Startボタンがクリックされた際に実行される関数とStopボタンがクリックされた際に実行される関数を完成させます。本記事でルーレットアプリ開発は完成となります。

 

誤字脱字など何かございましたらご連絡お願いします。

 

 

 

スポンサードサーチ


ルーレットを継続的に回転させる&止める

継続的回転と停止

ルーレットを継続的に回転させる処理は、Startボタンがクリックされた際に実行される関数に作成します。

継続的に回転させるためには無限ループのような仕組みを作成し、そのループ内で回転を実行します。

 

ルーレットを止める処理は、Stopボタンがクリックされた際に実行される関数に作成します。

ルーレットを止めるためには、無限ループから抜け出すような処理を実行します。

 

 

コードの提示

ルーレットを継続的に回転させる処理と止める処理のソースコードを以下に示します。

import tkinter as tk
import numpy as np


class RouletteApp():

    def __init__(self):
        # 省略

    def set_butttons(self):
        # 省略

    def set_circle(self):
        # 省略

    def set_triangle(self):
        # 省略

    def set_result_text(self):
        # 省略

    def rotate_fans(self):
        # 省略

    def check_roulette(self):
        # 省略

    def rotate_10ms(self):
        self.rotate_fans()
        self.after_id = self.root.after(10, self.rotate_10ms)

    def clk_start(self):
        self.canvas.itemconfig(self.txt_tag, text="")
        self.rotate_10ms()

    def clk_stop(self):
        self.root.after_cancel(self.after_id)
        self.check_roulette()


if __name__ == '__main__':
    rouletteapp = RouletteApp()
    rouletteapp.root.mainloop()

 

上記のコードは以下からダウンロードできます。

 

 

コードの解説

28行目から30行目の「rotate_10ms関数」は、継続的に回転させる関数です。

29行目の「self.rotate_fans()」は、ルーレットを10°回転させています。

 

30行目の「self.after_id = self.root.after(10, self.rotate_10ms)」は、10ミリ秒後にself.rotate_10ms関数を実行するようにスケジューリングしています。また、その返却値をself.after_idに代入しています。

10ミリ秒後に実行する関数としてself.rotate_10ms関数を設定することで、さらにその関数の中で10°回転します。さらに、その関数の中で、、、のように無限ループのような仕組みを使って継続的に回転させています。

 

34行目の「self.rotate_10ms()」は、継続的に回転させる関数を実行しています。

 

37行目の「self.root.after_cancel(self.after_id)」は、ルーレットの回転を止めています。after関数によって返される値を引数に代入して実行することで、スケジューリングされていた関数をキャンセルしています。

 

動作確認

動作確認

コードを保存したら、コマンドプロンプトを開きファイルを保存したフォルダまで移動します。移動したら、以下のコマンドを入力し実行します。

python rouletteapp.py

 

Startボタンをクリックしてルーレットが回転することを確認します。

実行結果

Stopボタンをクリックしてルーレットが止まることを確認します。

実行結果

 

以上が確認できたら動作確認完了です。

 

 

スポンサードサーチ


まとめ

まとめ

今回は、ルーレットを継続的に回転させる処理とその回転を止める処理を作成しました。継続的に回転させるためにafter関数を使いました。after関数は第1引数にミリ秒、第2引数に関数名を代入して使います。その第2引数にafter関数が実行されている関数を設定することで無限ループのような処理を実現しています。

 

以上でルーレットアプリ開発は完了です。

 

 

 

最後までお読みいただきありがとうございます。

 

しかし、応用編としてPart6があります。Part6は、ルーレットを徐々に止めるという処理を作成します。今回作成した止め方だと、狙って止めることができてしまいます。それを回避します。ご興味ある方はPart6も読んでみてください。


スポンサードサーチ