<p>您必须维护一个变量来计算用户已单击的频率,然后根据该变量的当前值,在一个位置或另一个位置绘制图形。你知道吗</p>
<pre><code>counter = 0
def printer(event):
global counter
x, y = event.x, event.y
if event.x in range (130,224) and event.y in range(197,305):
if counter == 0:
canvas.create_oval(146, 158, 140, 164, outline="indianred2", fill="red", width=1.5)
elif counter == 1:
canvas.create_oval(180.5, 158, 174.5, 164, outline="indianred2", fill="red", width=1.5)
elif counter == 2:
canvas.create_oval(209, 158, 215, 164, outline="indianred2", fill="red", width=1.5)
counter += 1
</code></pre>
<p>而且,代码中有相当多的重复。由于要在何处绘制的坐标似乎是唯一会发生变化的东西,因此可以使用字典(或简单数组)来存储要在何处绘制的图形。此外,使用<code>range</code>检查某个数字是否在某个范围内也是浪费,因为您不仅每次都创建一个新列表,而且还要检查该列表中的每个值。相反,只需使用<code><=</code>和<code><</code>。你知道吗</p>
<pre><code>coords = {0: (146, 158, 140, 164),
1: (180.5, 158, 174.5, 164),
2: (209, 158, 215, 164)}
counter = 0
def printer(event):
global counter
if 130 <= event.x < 224 and 197 <= event.y < 305:
if counter in coords:
a, b, c, d = coords[counter]
canvas.create_oval(a, b, c, d, outline="indianred2", fill="red", width=1.5)
counter += 1
</code></pre>