窗口标签不打印:Python

时间:2014-06-25 18:10:21

标签: python tkinter

我想创建两个窗口。

Windows的行为:

Window1有一个label和一个button。当我点击button时,必须打开第二个窗口。第二个窗口有一个label

问题:

第二个窗口中的

Label没有出现。

代码:

def window1():
    root = tkinter.Tk()
    root.geometry("200x200")
    root.title("Window1")
    var = tkinter.StringVar()

    tkinter.Label(root,  textvariable = var, bg = "red").grid(row = 0, column = 0)
    var.set("This is window1")

    tkinter.Button(root, text = "Button1", command = OnBut).grid(row =  0, column = 1)

    root.mainloop()

def OnBut():
    window2()

def window2():
    root = tkinter.Tk()
    root.title("Window2")
    root.geometry("250x250")

    var = tkinter.StringVar()

    tkinter.Label(root,  textvariable = var, bg = "blue").grid(row = 1, column = 0, padx = 3, pady = 3)
    tkinter.Button(root, text = "Button", command = OnBut).grid(row =  0, column = 1, padx  =3, pady = 3)
    var.set("This is window2")       #not appearing <-- problem

    root.mainloop()

window1()

当我单独打电话给window2时,它的工作正常。为什么label无法在第二个窗口中打印,只需点击button

1 个答案:

答案 0 :(得分:1)

在这种情况下,您并不需要为command提供真正的功能。这就是lambda的用途 - 回调!

删除onBut功能(无论如何都是问题,因为root未在此处定义)并将每个按钮中的command替换为:

command = lambda: window2(root)

目前,当您致电onBut时,它会尝试执行以下操作:

window2(root)
# HELP I DON'T KNOW WHAT root IS!!

这会在我的副本上抛出NameError。您的代码可能会有所不同。

由于您不耐烦地编辑,让我给您写一些工作代码。

import tkinter

def run():
    root = tkinter.Tk()
    root.title("Window1")
    s_var = tkinter.StringVar()
    tkinter.Label(root, textvariable = s_var).pack()
    tkinter.Button(root, text = "Button", command = lambda: makewindow(root)).pack()
    s_var.set("Window #1")

def makewindow(root):
    top = tkinter.Toplevel(root)
    top.title("Window2")
    s_var = tkinter.StringVar()
    tkinter.Label(top, textvariable = s_var).pack()
    tkinter.Button(top, text = "Button", command = lambda: makewindow(root)).pack()
    s_var.set("Window #2")

if __name__ == "__main__":
    run()