python tkinter 按钮在 while 循环中不起作用

问题描述 投票:0回答:1

这是我尝试运行的超级简化版本:

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

python tkinter
1个回答
0
投票

对于您当前的代码,导致问题的原因是,如错误所示,“应用程序已被破坏”。当您关闭窗口时会发生此错误。

您的代码处于

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
© www.soinside.com 2019 - 2024. All rights reserved.