2014-06-25 106 views
0

我想創建兩個窗口。窗口標籤不打印:Python

窗口的行爲:

窗口1有一個labelbutton。當我點擊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 seperately,其工作的罰款。爲什麼label無法在第二個窗口中打印,請點擊button

+1

root沒有在'onBut()'方法中定義 –

+0

抱歉@PadraicCunningham。現在我正確更新了。 – SGG

+0

你改變了'onBut'方法,沒有問題是'window2'需要參數。 –

回答

1

在這種情況下,您的command確實不需要真正的功能。這是什麼lambda是 - 回調!

刪除您onBut功能(這是問題,無論如何,因爲root是沒有定義),並將其替換您的command在每個按鈕:

command = lambda: window2(root) 

目前,當你調用onBut,它試圖做:

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

這會在我的副本上拋出NameError。你的代碼可能有所不同

既然你在編輯willy nilly,讓我給你寫一些工作代碼。

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() 
+0

我正確更新了問題。 – SGG

+0

@SGG恐怕你似乎沒有真正掌握問題,所以我不認爲我可以幫你。你已經改變你的代碼,使它越來越錯誤=/ –

+0

對不起。現在你可以試試。 – SGG