Tkinter GUIで無限ループを停止させるボタンを作成する方法
Tkinterは、PythonでGUIアプリケーションを構築するための標準ライブラリです。ここでは、「特定の処理をループ内で繰り返し実行するアプリケーション」を例に、無限ループをボタン操作で安全に停止させる方法を解説します。
課題:無限ループする再帰関数
例として、Labelウィジェットにテキストを永続的に表示し続ける再帰的な関数を考えてみましょう。このままでは処理が止まらないため、ユーザーが任意のタイミングで停止できる仕組みが必要になります。
解決策としては、ボタンがクリックされたときに条件を切り替える関数を定義します。具体的には、True / False を切り替えられるグローバル変数を用意し、その値によって再帰呼び出しを継続するかどうかを判定します。
サンプルコード
# 必要なライブラリをインポート
from tkinter import *
# tkinterフレームのインスタンスを作成
win = Tk()
# ウィンドウサイズを設定
win.geometry("700x350")
# ループの継続を制御するフラグ
run = True
def print_hello():
if run:
Label(win, text="Hello World", font=('Helvetica 10 bold')).pack()
# 1秒後に再度 print_hello() を呼び出す
win.after(1000, print_hello)
def start():
global run
run = True
def stop():
global run
run = False
# ループの開始・停止をトリガーするボタンを作成
start_btn = Button(win, text="Start", command=start)
start_btn.pack(padx=10)
stop_btn = Button(win, text="Stop", command=stop)
stop_btn.pack(padx=15)
# 1秒後に print_hello() を初回呼び出し
win.after(1000, print_hello)
win.mainloop()
コードのポイント
- グローバル変数
run:ループの継続可否を管理するフラグです。StartボタンでTrue、StopボタンでFalseに切り替わります。 win.after(1000, print_hello):1秒(1000ミリ秒)ごとに関数を再帰的に呼び出すことで、無限ループを実現しています。この方法ならメインループをブロックせず、UIの応答性も保たれます。- if文による分岐:
runがFalseの間は新しいLabelの追加が行われなくなるため、実質的にループが停止した状態になります。
実行結果
プログラムを実行すると、1秒ごとに「Hello World」というテキストがウィンドウ内に追加されていきます。ここで「Stop」ボタンをクリックすると、run フラグが False になり、それ以降は関数の描画処理が行われなくなります。再度「Start」ボタンを押せば、表示を再開することも可能です。
このように、グローバル変数と after() メソッドを組み合わせることで、Tkinterアプリケーションにおける無限ループを簡単かつ安全に制御できます。
-
Tkinterのイベントループと並行して独自のコードを実行する方法
Tkinterは、GUIベースのアプリケーションやゲームを開発するために広く利用されているPythonの標準ライブラリです。Tkinterはウィンドウやフレームを提供し、その中でプログラムや関数を他のウィジェット属性とともに実行できる環境を整えてくれます。アプリケーション開発を進めていると、「メインウィンドウを動かしながら、別の処理やコードの変更も同時に実行したい」という場面によく出会います。そんなときに役立つのが、Tkinterが提供するコールバック機構です。after(時間, タスク)メソッドを使用すると、指定した時間(ミリ秒)が経過した後に任意の処理を実行でき、メインループを止めることな
-
PythonのTkinterで簡単なメッセージボックスを作成する方法
Tkinterとは Tkinterは、PythonでGUIアプリケーションを作成・開発するための標準ライブラリです。ボタンやラベルなど、アプリケーションに多彩な機能を追加するためのメソッドや関数が豊富に用意されており、ダイアログボックスなどのウィジェットも簡単に作成できます。 この記事では、ポップアップで情報を表示したり、ユーザーに選択肢を提示したりできるシンプルなメッセージボックスの作成方法を解説します。 メッセージボックスの作成例 以下のサンプルコードでは、「Click」ボタンをクリックすると、エラーメッセージと警告メッセージが順番にポップアップ表示されるようにしています。 # 必要なラ