如何在不终止进程的情况下关闭Tkinter窗口?

时间:2020-11-06 21:04:41

标签: python tkinter tkinter-canvas

我有一个用Tkinter编写的可视化工具。通常,我独立执行它,然后在完成后手动关闭窗口。但是,我想从另一个Python程序中调用它,执行一次主循环(并将画布另存为SVG),然后关闭窗口,以允许该程序继续。
如果我什至不愿意打开一个窗口,而只是重新使用我的代码绘制SVG,那也可以。

我的tk应用程序如下:

class MainApplication(tk.Frame):

    def __init__(self, output_path, parent=None):
        tk.Frame.__init__(self, parent)
        self.parent = parent
        # draw visualization, save as svg
        #...
        #



在代码的另一部分,我调用

kill = True

root = tk.Tk()
root.title("Placement Visualizer")
MainApplication(output_path, root ).pack(side="top", fill="both", expand=True)
    
if kill:
    root.destroy()
root.mainloop()

我收到此错误:Tcl_AsyncDelete: async handler deleted by the wrong thread Aborted (core dumped) 我尝试使用root.quit()或删除root.mainloop(),但没有得到理想的结果。 谢谢

1 个答案:

答案 0 :(得分:0)

在“我的代码的另一部分”中:

if kill:
    root.quit()
else:
    root.mainloop()

要完全不打开窗口,而是要绘制所有内容并保存SVG,只需调用root.quit()。要正常打开窗口(必须关闭窗口,终止进程),请调用root.mainloop()。