首页 > 解决方案 > 调用 tk.Destroy() 会阻止我以后使用其他 tk 窗口?

问题描述

我想在继续运行我的代码之前关闭所有现有的 tk 窗口,而且我还没有Tk()对象的句柄。所以我想我会尝试以下我的错误的最小示例,它使用Tk.destroy()

import tkinter as tk
Tk = tk.Tk()
Tk.destroy()

window1 = tk.Tk()
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

f1,ax1 = plt.subplots()

frame1 = tk.Frame(window1,width=300,height=300,bg='blue')
frame1.place(x=0,y=0)

canvas1 = FigureCanvasTkAgg(f1,frame1)

canvas1.get_tk_widget().grid(row=0,column=0)

canvas1.draw()

编辑:

输出:

can't invoke "event" command: application has been destroyed

while executing

"event generate $w <<ThemeChanged>>"

(procedure "ttk::ThemeChanged" line 6)

invoked from within

"ttk::ThemeChanged"

标签: tkinter

解决方案


创建窗口后调用Tk.update()可防止显示此错误:

import tkinter as tk
Tk = tk.Tk()
Tk.update() ### WE CALL TK.UPDATE()
Tk.destroy()

window1 = tk.Tk()
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

f1,ax1 = plt.subplots()

frame1 = tk.Frame(window1,width=300,height=300,bg='blue')
frame1.place(x=0,y=0)

canvas1 = FigureCanvasTkAgg(f1,frame1)

canvas1.get_tk_widget().grid(row=0,column=0)

canvas1.draw()

我假设错误是由于您试图在窗口实际存在于屏幕上之前关闭它。


推荐阅读