用我开始的按钮打破循环?
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。
我想用启动它的同一个按钮来中断循环。 下面的代码不起作用,因为它在“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。