Tkinter 顶层 window 未定义

Tkinter toplevel window is not defined

我想知道是否有人可以告诉我是否可以使用外部函数更新顶层 windows。我已经在下面复制了我的问题,我需要做的是使用函数 updatelabel() 更新 Toplevel(master)。我使用类似的外部函数来更新根目录中的项目,这就像做梦一样。然而,在顶级 window 我总是得到

NameError: 名称 'newWindow' 未定义

我发现的唯一解决方法是在每次加载时使用 newWindow.destroy() 终止 newWindow,但此方法会使屏幕弹出然后再次关闭,这看起来不太漂亮。任何帮助非常欢迎谢谢。

from tkinter import *
from tkinter.ttk import *   
master = Tk()
master.geometry("200x200")

def updatelabel():
    Label(newWindow,
          text="I changed").pack()

def openNewWindow():
    # Toplevel object which will
    # be treated as a new window
    newWindow = Toplevel(master)

    # sets the title of the
    # Toplevel widget
    newWindow.title("New Window")

    # sets the geometry of toplevel
    newWindow.geometry("200x200")

    # A Label widget to show in toplevel
    Label(newWindow,
          text="I want to change").pack()

    button1 = Button(newWindow,
                 text="Click me to change label", command=updatelabel).pack()


btn = Button(master,
             text="open a new window",
             command=openNewWindow)
btn.pack(pady=10)

mainloop()

你的“newWindow”是在你的“openNewWindow”函数中定义的,所以它基本上只存在于那里,你可以通过在函数外部定义“newWindow”或将它用作参数来解决这个问题(只需将它添加到括号中并在函数本身的括号中为其命名)调用“updateLabel”

我认为这应该可行,虽然我没有使用过 tkinter,所以如果不行请不要怪我

from tkinter import *
from tkinter.ttk import *   
master = Tk()
master.geometry("200x200")

def updatelabel(newWindow):
    Label(newWindow,
          text="I changed").pack()

def openNewWindow():
    # Toplevel object which will
    # be treated as a new window
    newWindow = Toplevel(master)

    # sets the title of the
    # Toplevel widget
    newWindow.title("New Window")

    # sets the geometry of toplevel
    newWindow.geometry("200x200")

    # A Label widget to show in toplevel
    Label(newWindow,
          text="I want to change").pack()

    button1 = Button(newWindow,
                 text="Click me to change label", command= lambda: updatelabel(newWindow)).pack()


btn = Button(master,
             text="open a new window",
             command=openNewWindow)
btn.pack(pady=10)

mainloop()