以最小的編輯到您的代碼(不知道他們有沒有教課或不在您的課程),更改:
def close_window(root):
root.destroy()
到
def close_window():
window.destroy()
,它應該工作。
說明:
你的close_window
版本被定義爲期望一個參數,即root
。隨後,任何對您的close_window
版本的調用都需要這個參數,否則Python會給您一個運行時錯誤。
當您創建Button
時,您告知按鈕單擊時運行close_window
。然而,對於按鈕插件的源代碼是一樣的東西:
# class constructor
def __init__(self, some_args, command, more_args):
#...
self.command = command
#...
# this method is called when the user clicks the button
def clicked(self):
#...
self.command() # Button calls your function with no arguments.
#...
至於我的代碼州,Button
類將調用你的函數不帶參數。然而你的功能正在期待一個論點。因此你有一個錯誤。所以,如果我們採取了這樣的說法,這樣的函數調用將Button類內部執行,我們就只剩下:
def close_window():
root.destroy()
這是不對的,但是,無論是,因爲root
從未賦值。這就好像你還沒有定義x
時輸入print(x)
。
看你的代碼,我想你想叫destroy
上window
,所以我改變root
到window
。
嘿馬特。感謝您提出明確的問題,並附上簡潔明瞭的代碼示例。當你的代碼「不能正常工作」時,你能否確保在將來包含追溯(崩潰)?這也將幫助人們幾乎立即弄清楚代碼的哪部分被破壞了。很顯然,在這種情況下,你的代碼樣本非常小,很容易識別,但它可能確實有助於你在更困難的情況下獲得答案。 – jdi 2012-04-03 06:47:11
對於沒有立即看到問題的人,錯誤是'TypeError:close_window()缺少1個需要的位置參數:'root'。這意味着沒有參數傳遞給回調'close_window',因爲從來沒有'command ='函數。綁定事件回調確實得到一個參數 - 事件對象。 – 2015-03-17 00:23:13