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()
我想知道是否有人可以告诉我是否可以使用外部函数更新顶层 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()