2015-04-07 37 views
0

我的程序使用pointSize_maxpointSize變量繪製分形,這些變量由用戶在Tkinter中輸入。問題在於在按下按鈕之前繪製分形(程序運行後),並且程序在按下按鈕時不繪製分形。在創建按鈕時爲什麼按下按鈕之前調用的函數?

pointLabel = tk.Label(frame,text="minimaalne pikkus") 
pointLabel.pack() 
pointSize = tk.StringVar() 
pointEntry = tk.Entry(frame,textvariable=pointSize) 
pointEntry.pack() 
pointSize.set(str(10)) 

pointLabel_max = tk.Label(frame,text="maksimaalne pikkus") 
pointLabel_max.pack() 
pointSize_max = tk.StringVar() 
pointEntry_max = tk.Entry(frame,textvariable=pointSize_max) 
pointEntry_max.pack() 
pointSize_max.set(str(30)) 

drawButton = tk.Button(frame, text = "Draw a fractal", command=koch(int(pointSize_max.get()), int(pointSize.get()))) 

# koch function draws the fractal 

drawButton.pack() 

tk.mainloop() 

回答

0

koch的函數被調用,作爲tk.Button呼叫前的參數評估的一部分。您可以創建一個函數對象來調用。

def koch_invoke(): 
    koch(int(pointSize_max.get()), int(pointSize.get())) 
drawButton = tk.Button(frame, text = "Draw a fractal", command=koch_invoke) 
+0

謝謝!但現在按鈕不會出現。 – Kostya

+0

@ user2690370這是一個不同的問題,我很害怕。如果你離開'command',按鈕會出現嗎? –

+0

我發現了這個問題。非常感謝您的幫助! – Kostya

0

當你的腳本編譯談到此行並運行,因爲你調用它的函數:

command=koch(int(pointSize_max.get()), int(pointSize.get())) 

嘗試使用lambda來防止這種情況發生:

command= lambda x = int(pointSize_max.get()), y = int(pointSize.get()): koch(x, y)) 
相關問題