Поскольку вы связали событие <Button-1>
с обратным вызовом при нажатии кнопки start
, но не отменяйте привязку обратного вызова при нажатии кнопки stop
. Таким образом, обратный вызов в привязке будет по-прежнему вызываться при щелчке по холсту.
Либо вы отменяете обратный вызов (в этом случае не требуется глобальная переменная insert
):
def insert_cells():
def xyposition(event):
x = canvas.canvasx(event.x)
y = canvas.canvasy(event.y)
c = cell-1
x0 = int((x//cell)*cell+1)
y0 = int((y//cell)*cell+1)
canvas.create_rectangle(x0,y0,x0+c,y0+c, width=0, fill='green')
canvas.bind("<Button-1>", xyposition)
def stop_insert_cells():
canvas.unbind('<Button-1>')
или связать обратный вызов при запуске программы, а затем установить глобальную переменную insert
для запуска или остановки вставки:
def xyposition(event):
if insert:
x = canvas.canvasx(event.x)
y = canvas.canvasy(event.y)
c = cell-1
x0 = int((x//cell)*cell+1)
y0 = int((y//cell)*cell+1)
canvas.create_rectangle(x0,y0,x0+c,y0+c, width=0, fill='green')
def insert_cells():
global insert
insert = True
def stop_insert_cells():
global insert
insert = False
...
# cell filling
insert = False
canvas.bind('<Button-1>', xypostion)
Обратите внимание, что ваш код может создавать несколько прямоугольников в одной ячейке. Лучше сделать некоторую уборку, чтобы проверить, уже создан ли прямоугольник в ячейке.