「止めていた処理」はどのように処理を止めているのでしょう?
以前の回答にも書きましたが、一時停止・再開には スレッドで threading.Event が使えます。
Demo source code
python
1import tkinter as tk
2from threading import Thread, Event
3
4def button_stop_and_start(event):
5 print("処理1")
6 event.wait()
7 print("処理2")
8
9
10root = tk.Tk()
11event = Event()
12event.clear()
13thread = Thread(target=button_stop_and_start, args=(event,), daemon=True)
14thread.start()
15tk.Button(root, text="Start", command=event.set).pack()
16root.mainloop()
メインスレッドでは停止するとウィンドウが応答なしになってしまう為、
基本的には中断できません。ボタンが押せなくなってしまいます。
一応メインスレッドで実現する方法もありますが、
処理をジェネレータを使って表現して、タイマーを使って疑似的に実現することは可能です。
構文という意味ならジェネレータでの yield
で処理の中断・再開は表現出来ますが、
恐らく意図されてるような使い方は出来ません。停止・再開の仕組み自体は自分で実装する必要があります。
追記2: 実際にコードを書いてみて、意外とこの方法も使えそうでした。
追記: ジェネレーターを使ったサンプル
注意事項: メインスレッド上での実行となる為、
この場合、時間の掛かる処理は出来ません。
python
1import tkinter as tk
2from functools import partial
3
4def button_stop_and_start():
5 print("処理1")
6 yield
7 print("処理2")
8 yield
9 print("処理3")
10
11
12root = tk.Tk()
13gen = button_stop_and_start()
14
15tk.Button(root, text="Start", command=partial(next, gen, None)).pack()
16
17root.after_idle(next, gen) # 実行開始 (処理1 ~ yield で止まる)
18root.mainloop()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。