首页 > 解决方案 > 如何在 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 中的按钮来启动线程函数。我想知道如何在不必返回函数的情况下退出线程函数,并通过单击同一按钮或单独的按钮重新启动线程。如果单击开始按钮,我还会收到错误消息,指出线程只能启动一次。

标签: pythonpython-3.xtkinterpython-multithreading

解决方案


我认为“答案”很大程度上取决于您如何定义您要解决的设计问题,以及您如何提出问题。

答案似乎关闭了您与停止和重新启动线程相关的问题。

阅读“字里行间”来了解您要完成的工作是不同的。

我认为,根据您的代码,您的设计问题是暂停线程,这与停止和重新启动有很大不同。

@Tresdon 为讨论线程和异常提供参考。当处于异常中时,线程尚未死亡,除非它未处理。参考讨论指出线程分配了资源,一旦被杀死(释放),它就不是重新启动,而是需要重新创建。

要暂停线程,您只需要一个可以在线程代码中读取并由主代码切换的标志。如果设置,线程可以“等待”,如果没有设置,线程代码运行。根据其他设计标准,等待部分可以是睡眠,或其他可能消耗更多或更少资源的暂停机制。


推荐阅读