<p>您对海龟图形中的鼠标事件有一个基本的误解。它们以独立事件的形式出现,您不能简单地停止正在运行的代码等待事件的发生。您的代码必须设计为响应事件。你知道吗</p>
<p>我相信更简单的<a href="https://mcsp.wartburg.edu/zelle/python/" rel="nofollow noreferrer">Zelle Graphics</a>包可能更适合您的需要。它的<code>getMouse()</code>例程将停止您的程序并等待用户单击鼠标。你知道吗</p>
<p>下面我实现了一个粗略的可视化代码(已完成),它将无序数组打印到控制台。在图形窗口中,从底部开始,轴索引处的值以红色显示在中间,其余的数组值显示在两侧。在窗口中单击时,程序将前进,图形窗口将更新,直到排序的数组在控制台窗口中打印出来。再次单击将退出程序:</p>
<pre><code>from random import shuffle
from graphics import *
def swap(array, i, j):
array[i], array[j] = array[j], array[i]
def partition(array, start, end):
global text
pivotIndex = start
pivotValue = array[end]
for i in range(start, len(array) - 1):
if array[i] < pivotValue:
##########################################
# crude visualization example
text = [obj.clone() for obj in text]
left, pivot, right = text
left.setText(str(array[:pivotIndex]))
pivot.setText(str(array[pivotIndex]))
right.setText(str(array[pivotIndex + 1:]))
for obj in text:
obj.draw(window).move(0, -10)
window.getMouse() #
##########################################
swap(array, i, pivotIndex)
pivotIndex += 1
swap(array, pivotIndex, end)
return pivotIndex
def quickSort(array, low, high):
if low < high:
pivotIndex = partition(array, low, high)
quickSort(array, low, pivotIndex - 1)
quickSort(array, pivotIndex + 1, high)
########################################################################################
# crude visualization setup
window = GraphWin("Sorting Visualization", 800, 600)
text = [Text(Point(200, 600), ""), Text(Point(400, 600), ""), Text(Point(600, 600), "")]
text[1].setTextColor('red') #
########################################################################################
array = list(range(20))
shuffle(array)
print(array)
quickSort(array, 0, len(array) - 1)
print(array)
window.getMouse()
window.close()
</code></pre>
<p><a href="https://i.stack.imgur.com/esQ9r.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/esQ9r.png" alt="enter image description here"/></a></p>