用我开始的按钮打破循环?

Breaking a loop with the button I started it?

我想用启动它的同一个按钮来中断循环。 下面的代码不起作用,因为它在“sleep(2)”之后结束了循环。

我知道“camera.capture_continuous”是 PiCamera 专用的,但也许有人仍然可以帮助我找到解决方案。 ;)

import tkinter as tk
from picamera import PiCamera
root = tk.Tk()
camera = PiCamera()




def start_tl():
    if rec_btn.config('text')[-1] == 'START':
        rec_btn.config(text='STOP')
        for filename in camera.capture_continuous('/tl_img{counter:03d}.jpg', use_video_port=True):
            sleep(2)
            if rec_btn.config('text')[-1] == 'START':
                break

    
             
rec_btn = tk.Button(root,text="START", command=start_tl)
rec_btn.pack()



root.mainloop()

我没有使用过 picamera,所以该行被注释掉了,但请尝试以下操作,您将不得不使用线程,否则您的主 UI 线程将被锁定。 我添加了另一个按钮和一个标签,只是为了帮助显示进程 运行 在单独的线程上。

import tkinter as tk
from time import sleep
import threading

root = tk.Tk()

def start_tl():
    if rec_btn['text'] == 'STOP':
        t.join(1)
        rec_btn.config(text='START')
        return

    if rec_btn['text'] == 'START':
        t.start()
        rec_btn.config(text='STOP')
        return
def exit_tl():
    root.destroy()

def process_file():
    i = 1
    while rec_btn['text'] == 'STOP':
        i = i+1
        rec_btn.update()
        sleep(5)
        rec_lbl["text"] = "{}".format(i)
        # for filename in camera.capture_continuous('/tl_img{counter:03d}.jpg', use_video_port=True):
            #do something with the file??


rec_btn = tk.Button(root, text="START", command=lambda: start_tl())
rec_btn_exit = tk.Button(root, text="Exit", command=lambda: exit_tl())
rec_lbl = tk.Label(root,text="")
rec_btn.pack()
rec_btn_exit.pack()
rec_lbl.pack()

t = threading.Thread(target=process_file)

root.mainloop()

如果您需要您的线程能够启动、停止、启动、停止,请查看此 question and answers