<p>只需对代码进行最少的编辑(不确定他们是否教过课程),就可以更改:</p>
<pre><code>def close_window(root):
root.destroy()
</code></pre>
<p>到</p>
<pre><code>def close_window():
window.destroy()
</code></pre>
<p>它应该能起作用。</p>
<hr/>
<p><strong>说明:</strong></p>
<p>您的<code>close_window</code>版本被定义为只需要一个参数,即<code>root</code>。随后,任何对<code>close_window</code>版本的调用都需要有该参数,否则Python将给您一个<em>运行时错误</em>。</p>
<p>当您创建一个<code>Button</code>时,您告诉按钮在单击时运行<code>close_window</code>。但是,Button小部件的源代码如下:</p>
<pre><code># 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.
#...
</code></pre>
<p>正如我的代码所述,<code>Button</code>类将不带参数地调用函数。但是,函数需要参数。所以你犯了个错误。所以,如果我们去掉这个参数,这样函数调用就可以在Button类中执行,我们就剩下:</p>
<pre><code>def close_window():
root.destroy()
</code></pre>
<p>不过,这也不对,因为<code>root</code>从来没有赋值。这就像在尚未定义<code>x</code>时键入<code>print(x)</code>。</p>
<p>看看你的代码,我想你想在<code>window</code>上调用<code>destroy</code>,所以我把<code>root</code>改为<code>window</code>。</p>