"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)

如果你想让用户点击很慢,你就得自己统计点击次数了。