python - "If, Then" Statement - registering back-to-back mouse clicks -
python - "If, Then" Statement - registering back-to-back mouse clicks -
i want programme register 3 consecutive mouse clicks. upon each mouse click, unique object drawn (pre-determined location , shape). first click = first object appears, if click 1 time again = sec object appears, , if click 3rd time = 3rd object appears. should like?
here's have, isn't working:
def printer(event): x, y = event.x, event.y print(x,y) if event.x in range (130,224) , 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) , 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) , event.y in range(197,305): canvas.create_oval(209, 158, 215, 164, outline="indianred2", fill="red", width=1.5)
you have maintain variable counting how user has clicked, , then, depending on current value of variable, draw figure in 1 place or in other.
counter = 0 def printer(event): global counter x, y = event.x, event.y if event.x in range (130,224) , 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
also, there's quite bit of repetition in code. since coordinates draw seem thing changes, utilize dictionary (or simple array) store draw figure on click count. also, using range
check whether number in range wasteful, not create new list every time, check every value in list. instead, utilize <=
, <
.
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 , 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
python tkinter
Comments
Post a Comment