首页 > 解决方案 > tkinter:当调用`root.destory()`时,终止进程以`root.after`开始?

问题描述

我想我有一个概念问题。我想同时启动root.after和终止 GUI 程序和进程。目前,root.after在 GUI 被销毁后,开始的过程仍在继续。我需要如何正确执行此操作?

MWE:遍历一个列表并询问是否将 1 替换为 0。exit全部替换为 1后,按 即可正常关​​闭程序。否则,f即使 GUI 消失,流程也会继续进行:

import tkinter as tk

l = [0,1,1,0,1,0,1]

root = tk.Tk()
var = tk.IntVar()
termination=False

def update_l(i):
    l[i] = 0

def g(i):

    def replace():
        update_l(i)
        b1.destroy()
        b2.destroy()
        var.set(var.get()+1)

    def keep():
        b1.destroy()
        b2.destroy()
        var.set(var.get()+1)

    b1 = tk.Button(root, text='replace', command=replace)
    b1.pack()

    b2 = tk.Button(root, text='keep', command=keep)
    b2.pack()

    root.wait_variable(var)
    f()

def f():
    print(l)
    for i, j in enumerate(l):
        if termination:
            break
        if j:
            g(i)
            break

def terminate():
    global termination
    termination = True
    root.destroy()

b = tk.Button(root, text='exit', command=terminate)
b.pack()

root.after(200, f)
root.mainloop()

标签: pythonuser-interfaceasynchronoustkinterparallel-processing

解决方案


推荐阅读