python - 如何在 Tkinter GUI 中停止和重新启动 python 线程?
问题描述
import tkinter as tk
import tkinter.font
import threading
def sensor_4():
i = 0
while True:
i+=1
t4 = threading.Thread(target=sensor_4)
mainwindow = tk.Tk()
HEIGHT = 700
WIDTH = 800
canvas = tk.Canvas(mainwindow, height = HEIGHT, width = WIDTH)
canvas.pack()
frame = tk.Frame(mainwindow, bg='#08030D') #inside box
frame.place(relx=0, rely=0.1, relwidth = 0.95, relheight = 0.6)
start_sensor4=tk.Button(frame, text = "Press to Start 4", bg='#292230',fg='white',command = t4.start)
start_sensor4.place(relx=0, rely=0.24, relwidth = 0.2, relheight = 0.05)
mainwindow.mainloop()
在代码示例中,我可以通过按下 Tkinter GUI 中的按钮来启动线程函数。我想知道如何在不必返回函数的情况下退出线程函数,并通过单击同一按钮或单独的按钮重新启动线程。如果单击开始按钮,我还会收到错误消息,指出线程只能启动一次。
解决方案
我认为“答案”很大程度上取决于您如何定义您要解决的设计问题,以及您如何提出问题。
答案似乎关闭了您与停止和重新启动线程相关的问题。
阅读“字里行间”来了解您要完成的工作是不同的。
我认为,根据您的代码,您的设计问题是暂停线程,这与停止和重新启动有很大不同。
@Tresdon 为讨论线程和异常提供参考。当处于异常中时,线程尚未死亡,除非它未处理。参考讨论指出线程分配了资源,一旦被杀死(释放),它就不是重新启动,而是需要重新创建。
要暂停线程,您只需要一个可以在线程代码中读取并由主代码切换的标志。如果设置,线程可以“等待”,如果没有设置,线程代码运行。根据其他设计标准,等待部分可以是睡眠,或其他可能消耗更多或更少资源的暂停机制。