"If, Then" 语句 - 注册连续的鼠标点击
"If, Then" Statement - registering back-to-back mouse clicks
我想让我的程序记录三个连续的鼠标点击。每次单击鼠标时,都会绘制一个独特的对象(预先确定的位置和形状)。第一次点击 = 第一个对象出现,如果他们再次点击 = 第二个对象出现,如果他们点击第三次 = 第三个对象出现。这应该是什么样子?
这是我所拥有的,但无法正常工作:
def printer(event):
x, y = event.x, event.y
print(x,y)
if event.x in range (130,224) and event.y in range(197,305):
canvas.create_oval(146, 158, 140, 164, outline="indianred2", fill="red", width=1.5)
elif event.x in range (130,224) and event.y in range(197,305):
canvas.create_oval(180.5, 158, 174.5, 164, outline="indianred2", fill="red", width=1.5)
elif event.x in range (130,224) and event.y in range(197,305):
canvas.create_oval(209, 158, 215, 164, outline="indianred2", fill="red", width=1.5)
您必须维护一个变量来计算用户点击的频率,然后根据该变量的当前值,在一个地方或另一个地方绘制图形。
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
此外,您的代码中有相当多的重复。由于绘制位置的坐标似乎是唯一发生变化的东西,因此您可以使用字典(或简单数组)来存储根据点击次数绘制图形的位置。此外,使用 range
检查数字是否在某个范围内是一种浪费,因为您不仅每次都创建一个新列表,而且还要检查该列表中的 每个值 .相反,只需使用 <=
和 <
.
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
Tkinter 开箱即用地支持双击和三次点击。例如:
canvas.bind("<1>", self.on_click)
canvas.bind("<Double-1>", self.on_double)
canvas.bind("<Triple-1>", self.on_triple)
如果你想让用户点击很慢,你就得自己统计点击次数了。
我想让我的程序记录三个连续的鼠标点击。每次单击鼠标时,都会绘制一个独特的对象(预先确定的位置和形状)。第一次点击 = 第一个对象出现,如果他们再次点击 = 第二个对象出现,如果他们点击第三次 = 第三个对象出现。这应该是什么样子?
这是我所拥有的,但无法正常工作:
def printer(event):
x, y = event.x, event.y
print(x,y)
if event.x in range (130,224) and event.y in range(197,305):
canvas.create_oval(146, 158, 140, 164, outline="indianred2", fill="red", width=1.5)
elif event.x in range (130,224) and event.y in range(197,305):
canvas.create_oval(180.5, 158, 174.5, 164, outline="indianred2", fill="red", width=1.5)
elif event.x in range (130,224) and event.y in range(197,305):
canvas.create_oval(209, 158, 215, 164, outline="indianred2", fill="red", width=1.5)
您必须维护一个变量来计算用户点击的频率,然后根据该变量的当前值,在一个地方或另一个地方绘制图形。
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
此外,您的代码中有相当多的重复。由于绘制位置的坐标似乎是唯一发生变化的东西,因此您可以使用字典(或简单数组)来存储根据点击次数绘制图形的位置。此外,使用 range
检查数字是否在某个范围内是一种浪费,因为您不仅每次都创建一个新列表,而且还要检查该列表中的 每个值 .相反,只需使用 <=
和 <
.
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
Tkinter 开箱即用地支持双击和三次点击。例如:
canvas.bind("<1>", self.on_click)
canvas.bind("<Double-1>", self.on_double)
canvas.bind("<Triple-1>", self.on_triple)
如果你想让用户点击很慢,你就得自己统计点击次数了。