为了账号安全,请及时绑定邮箱和手机立即绑定

按钮调用的线程在功能完成后不退出

按钮调用的线程在功能完成后不退出

慕后森 2021-09-02 14:56:28
Python 版本 3.7 | NPM 版本 6.2.0 | 谷歌灯塔包 4.0.0 版我正在尝试创建一个相当简单的 Tkinter 窗口来自动化 Google 灯塔 NPM 包,但是在尝试停止线程时失败了。线程:lighthouse_thread = threading.Thread(target=start_lighthouse)以及启动线程的按钮:Start_Ligthouse = Button(root, text="Starten", command=lighthouse_thread.start)Start_Ligthouse.place(x=850, y=312)Start_Ligthouse.config(state=DISABLED)root.after(100, CheckInOut)该函数如下所示:def start_lighthouse():                                                                                                                                             global filenumber    global reportlocation    global instantkill    global file    Start_Ligthouse.config(state=DISABLED)       for url in file:        url = url.rstrip("\n")        print(url)        filename = url.replace("https","").replace("/","-").replace("\n","").replace(":","").replace("--","")        if os.path.isfile(reportlocation + "/" + filename + ".html"):            print("EXISTS!")            filenumber = 2            while True:                                                                                                                                                         newfilename = filename + "{}".format(filenumber)                if not os.path.isfile(reportlocation + "/" + newfilename + ".html"):                    filename = newfilename                    break                filenumber += 1        if instantkill:            break        #os.system("lighthouse --disable-device-emulation --throttling-method=provided --preset=perf --quiet --output-path={}/{}.html {}".format(reportlocation,filename,url))    CheckIn = False    CheckOut = False    print("LoopEnded")我评论了 os.system 命令,以便我可以快速浏览列表。如果我再次调用该函数,我会收到线程无法启动两次的错误(我理解。)但据我所知,线程应该在函数完成后终止。我的问题是:如何让线程在完成它应该做的事情后终止?
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

我没有使用按钮调用线程,而是创建了一个创建线程的函数。


def create_thread():

    print("Thread Created")

    lighthouse_thread = threading.Thread(target=start_lighthouse)

    lighthouse_thread.start()

按钮现在调用这个函数,从而创建一个新线程。


Start_Ligthouse = Button(root, text="Starten", command=create_thread)


查看完整回答
反对 回复 2021-09-02
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信