以最小的编辑到您的代码(不知道他们有没有教课或不在您的课程),更改:
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