<p><code>listcomplete=True</code>内的<code>getPos()</code>不会更改全局变量,而是在局部范围内创建一个同名的新变量</p>
<p>要更改全局变量,必须告诉python从全局范围使用它:</p>
<pre><code>def getPos(x,y):
global listcomplete # tell python to use the variable from the global scope
xlist.append(canvas.winfo_pointerx()) ##Logs the x and y coords when mouse is clicked
ylist.append(canvas.winfo_pointery())
print('appended the lists.')
if len(xlist)==3:
listcomplete=True
</code></pre>
<p>这是由于赋值运算符(<code>=</code>)的默认行为造成的</p>
<p>其他操作符,如比较操作符(<code>==</code>),如果在局部范围内找不到该变量,则将从封闭范围中查找该变量,因此您可以在<code>main()</code>内使用<code>while listcomplete==False:</code>,并告诉pyton使用全局范围中的变量</p>
<hr/>
<p>但理想情况下,您甚至不必使用该全局变量。相反,当您的条件满足时,运行turtle主循环并退出turtle窗口:</p>
<pre><code>import turtle as t
canvas=t.getcanvas()
xlist=[]
ylist=[]
def getPos(x,y):
xlist.append(canvas.winfo_pointerx()) ##Logs the x and y coords when mouse is clicked
ylist.append(canvas.winfo_pointery())
print('appended the lists.')
if len(xlist)==3:
t.bye() # exit turtle window
t.onscreenclick(getPos)
t.Screen().mainloop() # will wait until turtle window is closed
print('list complete.') ##Prints to alert the list has been finished
print(xlist)
</code></pre>