这是我尝试运行的超级简化版本:
import tkinter as tk
root=tk.Tk()
counter=1
while True:
def increase_counter():
global counter
counter+=1
button=tk.Button(
root,
text="click me",
command=increase_counter
)
button.pack()
print(counter)
root.mainloop()
此代码收到错误:“_tkinter.TclError:无法调用“按钮”命令:应用程序已被销毁”
我不明白为什么我会收到此消息,尽管我尽了最大努力也无法克服它。
我预计每次单击按钮时计数器都会增加 1
对于您当前的代码,导致问题的原因是,如错误所示,“应用程序已被破坏”。当您关闭窗口时会发生此错误。
您的代码处于
while
循环中,尽管 Tkinter 窗口不需要循环,因为它们本身已经是 while
循环(这就是当您调用 mainloop()
时函数 root.mainloop()
的含义)。这是 GUI 包的基础,它循环更新窗口并检查按钮单击等条件。
这意味着您在这里所做的是启动一个
while
循环,然后通过调用 while
启动另一个 root.mainloop()
循环。该代码将运行窗口循环,直到窗口关闭,然后移至下一行。当您关闭窗口时,该窗口或“应用程序”已被“销毁”。但是,您的 while
循环会重新运行并尝试再次将按钮打包到窗口上。但是没有窗口,所以出现错误。
这是一个固定的演示:
import tkinter as tk
root = tk.Tk()
counter = 1
def increase_counter():
global counter
counter += 1
print(counter) #call print inside of the your function so that it actually prints everytime counter is updated, instead of only once before you start your main loop
button = tk.Button(root, text="click me", command=increase_counter)
button.pack()
root.mainloop() #begins the window/application loop