Python
 Computer >> コンピューター >  >> プログラミング >> Python

Tkinterでストップボタンを使ってループ処理を停止する方法

Tkinterでボタン操作によりループを停止するには?

ループ内で処理を継続的に実行し、ボタンがクリックされたタイミングでそのループを停止したいケースはよくあります。一般的なプログラミング言語では、連続的なwhileループを中断するためにbreak文を使用します。しかし、Tkinterではwhileループの代わりにafter()メソッドを使って、指定した関数を一定間隔で繰り返し実行するのが基本です。

この継続的なループを中断するには、グローバルなブール型(Boolean)変数を用意し、その値を更新することでループの実行状態を切り替えます。

実装のポイント

  • ループにおけるフラグのような役割を果たすグローバル変数を作成する。
  • 実行の開始と停止を制御するためのStartボタンとStopボタンの2つを定義する。
  • ループの状態を更新するためのon_start()関数とon_stop()関数の2つを定義する。

コード例

# 必要なライブラリをインポート
from tkinter import *
from tkinter import ttk

# tkinterのフレーム(ウィンドウ)のインスタンスを作成
win = Tk()

# ウィンドウのサイズを設定
win.geometry("700x350")

running = True

# テキストをループで出力する関数を定義
def print_text():
    if running:
        print("Hello World")

    win.after(1000, print_text)

# ループを開始する関数を定義
def on_start():
    global running
    running = True

# ループを停止する関数を定義
def on_stop():
    global running
    running = False

canvas = Canvas(win, bg="skyblue3", width=600, height=60)
canvas.create_text(150, 10, text="Click the Start/Stop to execute the Code", font=('', 13))
canvas.pack()

# ループの開始/停止用ボタンを追加
start = ttk.Button(win, text="Start", command=on_start)
start.pack(padx=10)

stop = ttk.Button(win, text="Stop", command=on_stop)
stop.pack(padx=10)

# ウィンドウ内にテキストを出力する関数を実行
win.after(1000, print_text)

win.mainloop()

実行結果

上記のコードを実行すると、ループの動作を確認できます。「Start」ボタンをクリックすると「Hello World」というテキストが1秒ごと(1000ミリ秒間隔)に繰り返し出力され、「Stop」ボタンをクリックすると出力が停止します。再度「Start」を押せば、ループを再開することも可能です。

Hello World
Hello World
Hello World
Hello World
Hello World

Process finished with exit code 0

仕組みの解説

ここでのポイントは、win.after(1000, print_text)によって関数自身を1秒後に再び呼び出す形で擬似的なループを実現している点です。メインループをブロックしないため、GUIの操作性を損なうことなく処理を継続できます。

また、グローバル変数runningがフラグとして機能しており、on_stop()Falseに切り替えると、次回以降のprint_text()呼び出し時に条件分岐によって出力がスキップされます。ただし、この実装ではafter()によるスケジューリング自体は継続しているため、完全に処理を止めたい場合はafter_cancel()でスケジュールIDをキャンセルする方法も検討するとよいでしょう。

このように、after()メソッドによるスケジューリングとブール型のフラグ変数を組み合わせることで、whileループやbreak文に頼らずとも、Tkinterアプリケーション上で安全かつ柔軟にループ処理の開始・停止を制御できます。

  1. Tkinterで画像をボタンとして使う方法をわかりやすく解説

    Tkinterでは、画像ファイルをそのままボタンとして表示することができます。この記事では、角丸の画像ボタンを作成する方法を、実際のコード例とともに解説します。ここで紹介する手法は、フォーム、ゲーム、ダイアログボックスなど、さまざまなアプリケーションに応用できる汎用的なテクニックです。 画像ボタンの作り方の基本 Tkinterで見栄えの良い角丸ボタンを作る最も簡単な方法は、あらかじめ用意したボタン用の画像を、クリック可能なウィジェットとして配置することです。これを実現するのがPhotoImage()関数で、指定した画像ファイルを読み込んでボタンに渡すことができます。 具体的には、以下の手順で画

  2. Tkinterでボタンのテキストサイズをウィンドウに合わせて動的に変更する方法

    Tkinterのフレーム内にボタンを作成した際、ボタンのテキストをメインウィンドウのサイズに合わせて動的に拡大・縮小させたいケースはよくあります。ボタン自体はButtonウィジェットを使えば簡単に作成できますが、テキストサイズを動的に変化させるには、いくつかの機能を組み合わせる必要があります。この記事では、テキスト付きのボタンを作成し、Gridメソッドのrowconfigure()とcolumnconfigure()を使って、メインウィンドウ(ルートウィンドウ)のリサイズに追従できるようにする方法を解説します。bind(<Configure>)でイベントを結び付けるボタンのテキスト