繁体   English   中英

Tkinter 顶层 window 未定义

[英]Tkinter toplevel window is not defined

我想知道是否有人可以告诉我是否可以使用外部函数更新顶层 windows。 我已经在下方复制了我的问题,我需要做的是使用 function updatelabel() 更新 Toplevel(master)。 我使用类似的外部 function 来更新 root 中的项目,这就像做梦一样。 但是,对于顶级 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”function 中定义,因此它基本上只存在于其中,您可以通过在 function 之外定义“newWindow”或将其用作参数(只需将其添加到括号并在 function 本身的括号中为其命名)调用“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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM